我有两张桌子,就像这样(简化):
我在插座数据中有一些产品数据。我希望出口数据中的所有产品都具有货架份额百分比,而且我也希望产品不在出口数据中。我实现了左外连接,但它只返回出口数据中的产品。我的查询如下:
SELECT a.title, b.shelf_share_percentage
FROM cp_product a
LEFT OUTER JOIN cp_outlet_data b
ON a.id = b.product_id
WHERE b.plan_id='9d9184ff-b848-4515-97a2-cea63caddd67'
AND b.visit_id='1586bfd3-8a1b-4f3a-bbc7-eaf61774bb50'
AND b.town_id='414'
AND b.category_id='6'
AND b.shelf_share_id='3'
AND b.outlet_id='0331d624-6fcf-4ac9-8a73-3b60882c5136'
如何获得所有匹配和不匹配的产品?
答案 0 :(得分:2)
将cp_outlet_data
从WHERE
子句中的所有条件移到ON
子句中:
SELECT
a.title,
b.shelf_share_percentage
FROM cp_product a
LEFT JOIN cp_outlet_data b
ON a.id = b.product_id AND
b.plan_id = '9d9184ff-b848-4515-97a2-cea63caddd67' AND
b.visit_id = '1586bfd3-8a1b-4f3a-bbc7-eaf61774bb50' AND
b.town_id = 414 AND
b.shelf_share_id = 3 AND
b.outlet_id = '0331d624-6fcf-4ac9-8a73-3b60882c5136'
WHERE
b.category_id = 6;
当前查询中发生的情况是,虽然左连接最初包含cp_product
中的所有记录,即使它们不匹配,后续的WHERE
子句也会删除某些记录。通过将WHERE
逻辑添加到ON
子句,所有记录仍将保留。