我有一个数据库,我想查询与product_fields连接的产品中的所有记录。但是有可能在product_fields中没有关于颜色的记录,在这种情况下我仍然希望显示记录,只有字段颜色可以留空。 product_fields表包含同一产品的多个记录,并具有“名称”和“值”字段。
看到我提出的这句话:
SELECT p.*, c.value AS color
FROM products p
LEFT JOIN product_fields c ON c.product_id = products.id
WHERE c.name = 'color'
AND products.id = '1'
令我惊讶的是,这不起作用,我必须留下明显的东西吗?谢谢!
答案 0 :(得分:1)
您需要将条件放在ON
子句中,
SELECT p.*, c.value AS color
FROM products p
LEFT JOIN product_fields c
ON c.product_id = products.id AND
c.name = 'color'
WHERE products.id = '1'
LIMIT 1
在ON
子句和WHERE
子句中添加条件的主要区别在于,在ON
子句中,它在加入之前过滤掉指定表中的记录在另一个表上,WHERE
子句在表加入后过滤掉记录。