我对如何在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上独立工作。
这看起来非常简单,但我对如何获得这些结果感到头疼。有什么想法?
发布于 2012-10-01 09:22:54
此查询在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发布于 2012-10-01 09:45:32
您可以使用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;SQLFiddle Demo
发布于 2012-10-01 09:25:26
您需要做的是将表连接回自身,在其中一个别名上使用过滤器,并从另一个别名中提取结果集:
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 = 1https://stackoverflow.com/questions/12666513
复制相似问题