MySQL 中 集合的差的 運算 方法

來源:互聯網
上載者:User
1. http://www.blogjava.net/rox/archive/2006/09/01/67008.htmlMySql中集合運算非常規實現

MySql只支援Union(並集)集合運算,好像也是4.0以後才有的;
但是對於交集Intersect、差集Except,就沒有實現了。
一般的解決方案用in和not in來解決,小量資料還可以,但資料量大了效率就很低了。
其實,可以使用Union來實現另外兩種的運算,當然是沒有辦法的辦法。

差集Except:
SELECT ID FROM (
SELECT DISTINCT A.AID AS ID FROM TABLE_A A
UNION ALL
SELECT DISTINCT B.BID AS ID FROM TABLE_B B
)TEMP GROUP BY ID HAVING COUNT(ID) = 1

交集Intersect:
SELECT ID FROM (
SELECT DISTINCT A.AID AS ID FROM TABLE_A A
UNION ALL
SELECT DISTINCT B.BID AS ID FROM TABLE_B B
)TEMP GROUP BY ID HAVING COUNT(ID) = 2

不過,上述方法的功能也有限,
只能用來檢查某個id是不是A、B表中都存在,
或者只存在於A、B表其中之一,
並不能對id在某表中多次出現做出檢查。
而且,差集是有先後之分,這裡沒有。
2. http://hi.baidu.com/truetruelove/blog/item/f0fda8441bf22048510ffeba.html

1。求兩表差集, ewb_t_books 是圖書表,ewb_t_title是圖書分類表,通過bt_titleid(not null)串連。
找出分類不存在的圖書
a.子查詢使用not in
#explain extended
SELECT book_id,bt_titleid
FROM ewb_t_books b
WHERE bt_titleid NOT IN (SELECT bt_titleid FROM ewb_t_title)
#show warnings;

b.子查詢 not exists
#explain extended
SELECT book_id,bt_titleid
FROM ewb_t_books b
WHERE NOT EXISTS (SELECT * FROM ewb_t_title a WHERE b.bt_titleid= a.bt_titleid )
#show warnings;

c.左串連判斷右表is null
#explain extended
SELECT book_id,bt_titleid
FROM ewb_t_books LEFT JOIN ewb_t_title b USING (bt_titleid)
WHERE ISNULL(b.bt_titleid)
#show warnings;

總結:簡單測試了一下,not in最慢,其他兩個平分秋色,有待考證。

select * from employee where salary<>3000;

  對這個查詢,可以改寫為不使用NOT:

select * from employee where salary<3000 or salary>3000;

  雖然這兩種查詢的結果一樣,但是第二種查詢方案會比第一種查詢方案更快些。第二種查詢允許資料庫對salary列使用索引,而第一種查詢則不能使用索引。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.