1

MySQLで次のクエリを作成する方法がわかりません。1人の共同編集者がいる場合、この共同編集者が作業した各アイテムに参加したすべての共同編集者を取得したいと思います。

これが私の共同編集者の表です。

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では単独で機能しました。

これは非常に単純なようですが、私はこれらの結果を得る方法について頭を悩ませています。考え?

4

3 に答える 3

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
于 2012-10-01T01:22:53.680 に答える
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デモ

于 2012-10-01T01:45:31.843 に答える
2

あなたがする必要があるのは、エイリアスの1つでフィルターを使用し、他のエイリアスから結果セットをプルして、テーブルをそれ自体に結合することです。

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
于 2012-10-01T01:25:26.300 に答える