首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL LEFT JOIN 查詢差集:未中獎用戶篩選實戰

     編輯:MySQL 綜合教學

業務場景

  • enet_wall_list:參與抽獎用戶表(同一用戶可能多條記錄)
  • enet_wall_lottery:中獎用戶表
  • 需求:找出「參與了但未中獎」的所有用戶

核心 SQL

SELECT * 
FROM `enet_wall_list` AS l
LEFT JOIN `enet_wall_lottery` AS lottery 
    ON l.openid = lottery.openid
WHERE l.weid = 63
  AND lottery.id IS NULL
GROUP BY l.openid;

原理解析

  1. LEFT JOIN 保留左表所有行
  2. 右表無匹配時,右表列全部為 NULL
  3. lottery.id IS NULL 精準過濾出「無中獎記錄」的用戶
  4. GROUP BY openid 去重(同一用戶多次參與)

通用模板

-- 查詢 A 表存在、B 表不存在的記錄
SELECT * 
FROM `A` a 
LEFT JOIN `B` b ON a.pid = b.pid
WHERE b.pid IS NULL
  AND LENGTH(a.pid) < 10;  -- 額外業務過濾

知識點補充

  • LEFT JOIN:左表為主表,每行必出現;右表無匹配填 NULL
  • LENGTH(str):計算字符串字節長度(非字符數)
  • 對比 NOT IN/NOT EXISTS:LEFT JOIN + IS NULL 在大數據量下通常性能更優,且語義清晰
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved