左加入不工作

时间:2013-10-25 07:22:17

标签: mysql

我正在开发opencart项目。在管理面板中,我只想列出那些不属于类别ID 71的产品,即使产品没有任何类别的地图。

以下是根据条件获取产品的查询:

SELECT * 
FROM nu_product p 
LEFT JOIN nu_product_to_category p2c ON (p.product_id = p2c.product_id) 
LEFT JOIN nu_product_description pd ON (p.product_id = pd.product_id)
WHERE pd.language_id = '1' AND p2c.category_id != '71' 
GROUP BY p.product_id 
ORDER BY p.product_id DESC 
LIMIT 0,20  

但上述条件仅给出了不属于类别ID 71的产品。不属于任何类别的产品未显示。我想也要展示它们 那么,请告诉我上面的查询有什么问题。我错过了以上查询中的内容。

2 个答案:

答案 0 :(得分:1)

您的问题出在NULL category_id上。表达式NULL != '71'的计算结果为NULL,(显然不是true),因此p2c.category_id != '71'条件将其排除。 为了解决此问题,您必须明确处理这些NULL,例如:

SELECT    * 
FROM      nu_product p 
LEFT JOIN nu_product_to_category p2c ON (p.product_id = p2c.product_id) 
LEFT JOIN nu_product_description pd ON (p.product_id = pd.product_id)
WHERE     pd.language_id = '1' AND (p2c.category_id IS NULL OR p2c.category_id != '71')
GROUP BY  p.product_id 
ORDER BY  p.product_id DESC LIMIT 0,20

答案 1 :(得分:0)

SELECT * 
FROM nu_product p 
LEFT JOIN nu_product_to_category p2c ON (p.product_id = p2c.product_id) and p2c.category_id != '71' 
LEFT JOIN nu_product_description pd ON (p.product_id = pd.product_id) and pd.language_id = '1'
GROUP BY p.product_id 
ORDER BY p.product_id DESC 
LIMIT 0,20  

基本上尝试使用where子句将其更改为内连接。