5

私は2つのテーブルを持っています

表1

ID     NAME
1      Person1
2      Person2
3      Person3

表 2

ID     GROUP_ID
1      1
2      2,3

上記のすべての列の ID は同じ ID を参照しています (例 - 部門)

私の期待される出力(両方のテーブルを結合することにより)

GROUP_ID     NAME
1            Person1
2,3          Person2,Person3

これを達成できるクエリはありますか。あなたの助けは非常に高く評価されています。ありがとうございました。

4

2 に答える 2

9

この上でFIND_IN_SET()とを使用できます。GROUP_CONCAT()

SELECT  b.Group_ID, GROUP_CONCAT(a.name) name
FROM    Table2 b
        INNER JOIN Table1 a
            ON FIND_IN_SET(a.ID, b.Group_ID) > 0
GROUP   BY b.Group_ID

出力

╔══════════╦═════════════════╗
║ GROUP_ID ║      NAME       ║
╠══════════╬═════════════════╣
║ 1        ║ Person1         ║
║ 2,3      ║ Person2,Person3 ║
╚══════════╩═════════════════╝

補足として、このクエリは期待どおりに効率的に実行されない可能性があります。コンマで区切られた値を保存しないで、テーブルを適切に正規化してください。

アップデート

GROUP_IDかなり混乱しています。そうじゃないPersonIDList?とにかく、これが私の提案するスキーマ設計です。

PERSON テーブル

  • 個人ID (PK)
  • 人名
  • 他のコラム..

グループテーブル

  • グループ ID (PK)
  • グループ名
  • 他のコラム..

PERSON_GROUP テーブル

  • PersonID (FK) (同時に列 GroupID を持つ PK)
  • グループ ID (外部キー)
于 2013-06-04T03:16:16.107 に答える
1

MySQL を使用しているため、このオプションが気に入っていFIND_IN_SETますが、次のように使用しても機能する代替ソリューションをLIKE次に示しJOINます。

select t2.group_id, group_concat(t1.name order by t1.name separator ',' ) name
from t1 inner join t2 
  on concat(',',t2.group_id,',') like concat('%,',t1.id,',%') 
group by t2.group_id;

SQL フィドルのデモ

データの正規化を検討することをお勧めします.コンマ区切りのリストをリレーショナルデータベースに保存することは、通常は悪い考えです.

于 2013-06-04T03:27:30.373 に答える