【问题标题】:mysql intersection, comparison, opposite of UNION?mysql的交集,比较,UNION的对立面?
【发布时间】:2011-03-03 18:19:22
【问题描述】:

我正在尝试比较两组结果,很难了解子查询的工作方式以及它们是否有效。我不会解释我所有的表,但只是想我有一对数组......我可能会在 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...

谢谢!!!

【问题讨论】:

    标签: mysql intersection


    【解决方案1】:

    不幸的是,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
    

    显然,您可以将省略号替换为您要返回的实际列以及您希望在其上进行分组的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2018-11-20
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多