首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否匹配多个字段的MySQL查询?

是否匹配多个字段的MySQL查询?
EN

Stack Overflow用户
提问于 2012-10-01 09:15:37
回答 3查看 97关注 0票数 1

我对如何在MySQL中编写以下查询感到困惑:给定一个协作者,我希望获得参与该协作者工作的每个项目的所有协作者。

下面是我的合作者表:

代码语言:javascript
复制
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,查询将返回:

代码语言:javascript
复制
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上独立工作。

这看起来非常简单,但我对如何获得这些结果感到头疼。有什么想法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-01 09:22:54

此查询在item_id上联接,并为您提供所有在共享项目上与给定协作者一起工作的唯一协作者,但协作者本人除外:

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2012-10-01 09:45:32

您可以使用subquery

代码语言:javascript
复制
SELECT *
FROM collaborator
WHERE item_ID IN
(
   SELECT item_ID
   FROM collaborator
   WHERE collaborator_id = 1
) 
ORDER BY item_ID, Collaborator_ID

或使用JOIN

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2012-10-01 09:25:26

您需要做的是将表连接回自身,在其中一个别名上使用过滤器,并从另一个别名中提取结果集:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12666513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档