MySQL查询匹配多个字段?

时间:2012-10-01 01:15:37

标签: mysql sql

我对如何在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上工作。

这看起来非常简单,但我正在大脑冻结如何获得这些结果。思考?

3 个答案:

答案 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;

SQLFiddle Demo

答案 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