首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL连接三个表并显示0(如果为null )

MySQL连接三个表并显示0(如果为null )
EN

Stack Overflow用户
提问于 2017-06-21 08:15:17
回答 3查看 1.8K关注 0票数 3

我有三张桌子:

person_table id_ 1名男子 2-简-女性 3名珍妮特-女性 男的杰伊等等。

product_table id_名称 1份杂志 2本书 3倍纸 4小说 等等。

**person_product person_id| product_id维数 1\x{e76f}1 1-3/3-3 2-3-1 4\x{e76f}2 等等。

我已经尝试了一个查询,它将返回这样一个表: person_id| person_name product_name| quantity,但是我不能这样做,所以如果说John没有书,它应该显示(johns )John\book x 0,而不是跳过这一行。我哪里出错了?以下是我想出的:

代码语言:javascript
运行
复制
SELECT p.*, f.name, l.quantity 
FROM person_product AS l 
INNER JOIN people_table AS p ON l.person_id=p.id 
INNER JOIN product_table AS f ON l.product_id=f.id
ORDER BY id`
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-21 08:50:50

似乎您正在生成一份关于all people的报告,而all产品的数量与之相关;在一个大的数据集中,这可能需要一段时间,因为您并不是为了数量以外的任何东西而专门将产品加入到个人:

代码语言:javascript
运行
复制
SELECT
p.id,
p.name,
p.gender,
f.name,
IFNULL(l.quantity,0) AS quantity

FROM person_table AS p

JOIN product_table AS f

LEFT JOIN person_product AS l
    ON l.person_id = p.id
    AND l.product_id = f.id

ORDER BY p.id, f.name

其结果是:

这是你想要的吗?

票数 2
EN

Stack Overflow用户

发布于 2017-06-21 08:25:12

您需要从people_table开始,而不是使用left,您需要带其他表数据。

,因为您需要0值,如果为空,则可以使用函数IFNULL。

代码语言:javascript
运行
复制
SELECT p.*, f.name, IFNULL(l.quantity,0)
FROM people_table AS p
LEFT JOIN  person_product AS l  ON l.person_id=p.id
LEFT JOIN product_table AS f ON l.product_id=f.id
ORDER BY p.id
票数 1
EN

Stack Overflow用户

发布于 2017-06-21 08:26:42

如果没有书不应该出现在表中,试试这个(容易理解):

代码语言:javascript
运行
复制
SELECT NAME
    ,'0'
    ,'0'
FROM person_table
WHERE id NOT IN (
        SELECT person_id
        FROM person_product
        )

UNION

SELECT person_id
    ,product_id
    ,quantity
FROM person_product;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44670444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档