我对如何在MySQL中编写以下查询感到困惑:鉴于一位合作者,我想让参与此协作者所处理的每个项目的所有协作者都参与进来。
这是我的合作者表:
id collaborator_id item_id
1 1 1
2 2 1
3 3 1
4 4 2
5 1 2
6 2 3
对于collaborator_id = 1,查询将返回:
collaborator_id item_id
1 1
2 1
3 1
1 2
4 2
所以collaborator_id = 1在item_id = 1上使用collaborator_ids = 2,3并且自己在item_id = 2上工作。
这看起来非常简单,但我正在大脑冻结如何获得这些结果。思考?
答案 0 :(得分:5)
此查询加入item_id,并为您提供与共享项目上的指定协作者合作的所有唯一协作者,而不是协作者本人:
SELECT distinct b.collaborator_id, b.item_id
FROM collab_table a
JOIN collab_table b
on a.item_id = b.item_id
WHERE a.collaborator_id = 1
and b.collaborator_id != 1
答案 1 :(得分:3)
您可以使用subquery
SELECT *
FROM collaborator
WHERE item_ID IN
(
SELECT item_ID
FROM collaborator
WHERE collaborator_id = 1
)
ORDER BY item_ID, Collaborator_ID
或使用JOIN
SELECT a.*
FROM COLLABORATOR a
JOIN COLLABORATOR b
ON a.ITEM_ID = b.ITEM_ID
WHERE b.COLLABORATOR_ID = 1
ORDER BY item_ID, Collaborator_ID;
答案 2 :(得分:2)
您需要做的是将表格连接回自身,使用其中一个别名上的过滤器,然后从另一个中拉出结果集:
select a.COLLABORATOR_ID, a.ITEM_ID
from COLLABORATOR as a
inner join COLLABORATOR as b on
a.ITEM_ID = b.ITEM_ID
where b.COLLABORATOR_ID = 1