今天在做一個微信牆的抽獎程序的時候遇到了一個問題,我需要查詢量表的差集,業務情形是這樣的
一個表用來保存抽獎用戶的(www.111cn.net 一個人可能會有多條數據),而另一張表保存的是中獎的用戶,我需要報麼有中獎的所用用戶查找出來,剛開始用的是where進行多表關聯查詢,但是最終發現當中獎表中麼有數據的時候是查找不到任何信息的,改用LEFT JOIN 用這個就很簡單了,
代碼如下DESC 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
左連接查詢,查找相等的,如果沒有的lottery表中會用NULL字段直接判斷下就可以過濾一下數據了,然後得到需要的數據即可 。
例子
環境:A/B 兩表為關聯表。關聯字段,pid。A表為主表,數據多於B表。現查詢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
講述下以上SQL所用到的知識:
1、LEFT JOIN ON : left join 左邊的表為主表,主表中的每條數據都會顯示。右邊的表中如果沒有數據,則表示為null
2、LENGTH 計算字符串的長度