以下內容轉自:http://blog.csdn.net/ColdFireMan/article/details/73284641

版權聲明:本文為博主原創文章,未經博主允許不得轉載。
mysql的常見場景,獲取兩個數據集的交集和差集
步驟
- 兩個集合的結構要一致,對應的字段數,字段類型
- 將兩個集合用 UNION ALL 關鍵字合並,這里的結果是有重復的所有集
- 將上面的所有集 GROUP BY id
- 最后 HAVING COUNT(id)=1,等於1的意思是只出現了一次,所以這個是差集,如果等於2,那么就是交集
代碼演示
差集
-- 下面的sql有明顯的問題,不過這個只是一個示意, -- 從一個表中查詢不需要用到交集和差集,條件可以合並在一起直接查詢出來的.能明白意思就好 -- 下面的sql的意思是找到所有非技術部的員工的id,code和name SELECT a.* FROM( SELECT id,code,name FROM test_emp UNION ALL SELECT id,code,name FROM test_emp WHERE dept='JSB' )a GROUP BY a.id HAVING COUNT(a.id)=1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
交集
-- 下面的sql的意思是找到所有技術部年齡大於25的員工 SELECT a.* FROM( SELECT id,code,name FROM test_emp WHERE age>25 UNION ALL SELECT id,code,name FROM test_emp WHERE dept='JSB' )a GROUP BY a.id HAVING COUNT(a.id)=2
- 1
- 2
- 3
- 4
- 5
- 6
並集
-- 下面的sql的意思是找到所有技術部的員工和年齡大於30的員工 -- union可以自動去除重復的內容,得到不重復的結果集 SELECT a.* FROM( SELECT id,code,name FROM test_emp WHERE age>25 UNION SELECT id,code,name FROM test_emp WHERE dept='JSB' )a
- 1
- 2
- 3
- 4
- 5
- 6
- 7