返回mysql中所有匹配和不匹配的值

时间:2018-03-15 06:46:25

标签: mysql join

我有两张桌子,就像这样(简化):

  1. 列ID和标题的产品
  2. 包含列ID的出口数据,     产品ID和货架份额百分比
  3. 我在插座数据中有一些产品数据。我希望出口数据中的所有产品都具有货架份额百分比,而且我也希望产品不在出口数据中。我实现了左外连接,但它只返回出口数据中的产品。我的查询如下:

    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'
    

    如何获得所有匹配和不匹配的产品?

1 个答案:

答案 0 :(得分:2)

cp_outlet_dataWHERE子句中的所有条件移到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子句,所有记录仍将保留。