我有三个表:
person_table
id| name | gender
1 | Joe | male
2 | Jane |female
3 | Janet | female
4| Jay | male etc...
product_table
id| name
1 | magazine
2 | book
3 |paper
4 | novel
etc...
**person_product
person_id| product_id | quantity
1 | 1 | 1
1 | 3 | 3
2 | 3 | 1
4 | 4 | 2
etc...
我试图进行一个查询,该查询将返回如下表格: 人员编号|人名 |产品名称|数量 但我做不到,如果让我们说约翰没有书,它应该显示 (jons id) 约翰|书|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`
最佳答案
您似乎正在针对具有相关数量的所有产品生成一份关于所有人的报告;在大型数据集上,这可能需要一段时间,因为除了数量之外,您并没有专门将产品与人联系起来:
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
结果是:
这或多或少是您所追求的吗?
关于php - MySQL连接三张表,如果为空则显示0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670444/