选择三个表上两个用户之间共同的所有项目

我有三张桌子 item_to_user(用于存储用户和项目之间的关系)
| item_to_user_id | user_id |  item_id |
-----------------------------------------
item_tb
| item_id | item_name |
-----------------------
user_tb
| user_id | user_name |
-----------------------
一个项目可以属于一个或多个用户,反之亦然,这就是我使用第一个表格的原因。 因此,给定user_id = A和user_id = B我如何进行mysql查询以选择属于用户A和用户B的所有项目? 注意:我昨天写了一个类似的问题但是关于两张桌子而不是三张。     
已邀请:
   SELECT i.*
     FROM item_tb AS i
LEFT JOIN item_to_user AS iu
       ON iu.item_id = i.item_id
LEFT JOIN user_tb AS u
       ON iu.user_id = u.user_id
    WHERE u.user_name IN ('A', 'B')
 GROUP BY i.item_id
   HAVING COUNT(i.item_id) > 1
    
通过预先显示A和B之间的公共项目(通过count(*)= 2)将预先限制可能的最终项目列表以获取详细信息。然后将其作为查询中的SECOND表连接到items表应该有助于提高性能。特别是如果A& B有50个常用项目,但您的项目表包含1000个项目。
select straight_join 
       i.item_id, 
       i.item_name
   from
       ( select iu.item_id
               from item_to_user iu
                  join user_tb u
                     on iu.user_id = u.user_id
                    and u.user_name in ( 'A', 'B' )
               group by 1
               having count(*) = 2 ) Matches,
       item_tb i
   where
      Matches.item_id = i.item_id
    
如果用户不能重复项目,那么这个简单的项目将起作用:
select item_id
from item_to_user
where user_id in ('A', 'B')
group by item_id
having count(*) > 1
    

要回复问题请先登录注册