我试图比较两组很难解决的问题,以及子查询是如何工作的以及它们是否有效。我不会解释我的所有表格,但只是认为我有一对数组...我可能会在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 ...
感谢!!!
答案 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
显然,您会将椭圆替换为您想要返回的实际列以及您希望分组的列。