0

我有一个数据库,我想查询与 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'

令我惊讶的是,这不起作用,我一定遗漏了一些明显的东西?谢谢!

4

1 回答 1

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子句在表连接后过滤掉记录。

于 2013-04-13T12:51:53.150 回答