随笔-46  评论-54  文章-0  trackbacks-0
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在某表中多次出现做出检查。
而且,差集是有先后之分,这里没有。

posted on 2006-09-01 09:29 rox 阅读(2622) 评论(0)  编辑  收藏 所属分类: DBMysql

只有注册用户登录后才能发表评论。


网站导航: