mysql交集,比较,对UNION?

时间:2011-03-03 18:19:22

标签: mysql intersection

我试图比较两组很难解决的问题,以及子查询是如何工作的以及它们是否有效。我不会解释我的所有表格,但只是认为我有一对数组...我可能会在php中这样做但我想知道我是否可以立即在mysql中完成...

这是我查询用户1 在他拥有的列表中有多少项

SELECT DISTINCT *
FROM list_tb 
INNER JOIN item_to_list_tb 
ON list_tb.list_id = item_to_list_tb.list_id
WHERE list_tb.user_id = 1
ORDER BY item_to_list_tb.item_id DESC 

这是我查询用户2 在他拥有的列表中有多少项

SELECT DISTINCT *
FROM list_tb 
INNER JOIN item_to_list_tb 
ON list_tb.list_id = item_to_list_tb.list_id
WHERE list_tb.user_id = 1
ORDER BY item_to_list_tb.item_id DESC 

现在问题是我会将这些结果相交以检查它们共有多少item_id ...

感谢!!!

1 个答案:

答案 0 :(得分:2)

不幸的是,MySQL不支持Intersect谓词。但是,实现该目标的一种方法是从您的Select和Group By中排除List_Tb.UserId,然后按不同的User_Id进行计数:

Select ... -- everything except List_Tb.UserId
From List_Tb 
    Inner Join Item_To_List_Tb 
        On List_Tb.List_Id = Item_To_List_Tb.List_Id
Where List_Tb.User_Id In(1,2)
Group By ... -- everything except List_Tb.UserId
Having Count( Distinct List_Tb.User_Id ) = 2
Order By item_to_list_tb.item_id Desc

显然,您会将椭圆替换为您想要返回的实际列以及您希望分组的列。