我在做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的产品。不属于任何类别的产品不显示。我也想给他们看。
所以,请告诉我上面的问题是什么。我是不是错过了上面的问题。

最佳答案

您的问题在于NULLcategory_ids,NULL != '71'表达式的计算结果为NULL(显然不是true),因此p2c.category_id != '71'条件排除了它们。
为了解决这个问题,您必须显式地处理那些NULLs,例如:

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

关于mysql - 左联接不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19583577/

10-11 04:42