You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询指定日期无对应发票的商铺 LEFT JOIN查询反向结果获取

核心问题说明

你当前的查询本质已经是内连接逻辑:LEFT JOIN后在WHERE子句筛选右表sh__shop_invoice的非空字段,会自动排除所有没有匹配到发票的商铺,所以直接写NOT LIKE "2021-08-01"只能筛掉刚好有该日期发票的商铺,会漏掉完全没有开过任何发票的商铺,无法得到正确结果。

实现方案

方案1:LEFT JOIN + 关联条件前置

把日期筛选条件放到JOIN的ON子句中,仅关联指定日期的发票记录,再筛选没有匹配到发票的商铺即可:

SELECT sh__shop.id AS shop_id, sh__shop.name
FROM sh__shop 
LEFT JOIN sh__shop_invoice 
  ON sh__shop_invoice.shop_id = sh__shop.id 
  AND sh__shop_invoice.month_commission = '2021-08-01' -- 日期条件提前到关联阶段
WHERE sh__shop_invoice.id IS NULL -- 筛选没有匹配到对应发票的商铺

注:如果month_commission是日期类型,直接用=比LIKE效率更高,不需要模糊匹配。

方案2:NOT EXISTS 子查询

逻辑更直观,性能和方案1基本一致:

SELECT sh__shop.id AS shop_id, sh__shop.name
FROM sh__shop 
WHERE NOT EXISTS (
  SELECT 1 FROM sh__shop_invoice 
  WHERE sh__shop_invoice.shop_id = sh__shop.id
    AND sh__shop_invoice.month_commission = '2021-08-01'
)

两种方案都可以覆盖两类符合要求的商铺:

  • 开过发票但从未开具过2021-08-01对应发票的商铺
  • 从未开具过任何发票的商铺

内容的提问来源于stack exchange,提问作者London Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:24:00