SELECT,从 JOIN 上的 WHERE 获取反转结果

SELECT, get the invert result from the WHERE on the JOIN

我有这个 MySQL 请求让所有商店在特定日期开具发票:

SELECT sh__shop.id AS shop_id, sh__shop.name,
       sh__shop_invoice.*
FROM sh__shop 
LEFT JOIN sh__shop_invoice ON sh__shop_invoice.shop_id = sh__shop.id
WHERE sh__shop_invoice.month_commission LIKE "2021-08-01"

但我看不出如何求逆。所有在特定日期没有发票的商店。我做不到 NOT LIKE "2021-08-01".

您可以尝试使用左连接,但对于 nkt 匹配行

SELECT distnct sh__shop.id AS shop_id
FROM sh__shop 
LEFT JOIN sh__shop_invoice ON sh__shop_invoice.shop_id = sh__shop.id
    AND  sh__shop_invoice.month_commission LIKE "2021-08-01"
WHERE sh__shop_invoice.shop_id is null 

(在您的查询中,您以错误的方式使用左联接,因为在 where 子句中添加左联接列作为内部联接)

您可以使用 not exists 来实现。

SELECT sh__shop.id AS shop_id, sh__shop.name
FROM sh__shop 
WHERE 
    NOT EXISTS (SELECT * FROM sh__shop_invoice i
            WHERE i.shop_id = sh__shop.id
                  AND i.month_commission LIKE "2021-08-01");