我有三张桌子:
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,而不是跳过这一行。我哪里出错了?以下是我想出的:
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`
发布于 2017-06-21 08:50:50
似乎您正在生成一份关于all people的报告,而all产品的数量与之相关;在一个大的数据集中,这可能需要一段时间,因为您并不是为了数量以外的任何东西而专门将产品加入到个人:
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
其结果是:
这是你想要的吗?
发布于 2017-06-21 08:25:12
您需要从people_table开始,而不是使用left,您需要带其他表数据。
,因为您需要0值,如果为空,则可以使用函数IFNULL。
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
发布于 2017-06-21 08:26:42
如果没有书不应该出现在表中,试试这个(容易理解):
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;
https://stackoverflow.com/questions/44670444
复制相似问题