我在做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的产品。不属于任何类别的产品不显示。我也想给他们看。
所以,请告诉我上面的问题是什么。我是不是错过了上面的问题。
最佳答案
您的问题在于NULL
category_id
s,NULL != '71'
表达式的计算结果为NULL
(显然不是true
),因此p2c.category_id != '71'
条件排除了它们。
为了解决这个问题,您必须显式地处理那些NULL
s,例如:
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/