3

DISTINCT(p.ptype) を選択したいと同時に、p.ptype が c.ptype のセットにない場合は c.category も取得したい

データベース テーブル: p

id   ptype
1    Shirts
2    Cups
3    Shirts
4    Mugs

データベース テーブル: c

id  category  ptype
1   Test      Pants, Shirts, TShirts
2   Test1     Cups, Mats, Rugs

私が試したSQLコマンドは次のとおりです

SELECT DISTINCT(p.ptype), IF(FIND_IN_SET(p.ptype, c.ptype), c.category,'') as category
FROM p, c 

これは、セットに 2 回ある p.ptype を出力します。1 回は c.category フィールドが空白で、もう 1 回は c.category が入力されています。

ただし、望ましい出力は次のとおりです

ptype    category
Shirts   Test
Cups     Test1
Mugs
4

1 に答える 1

2

テーブル内の CSV リストに存在するテーブルから明示的に実行してみてLEFT JOINください。ptypepc

SELECT DISTINCT p.ptype, COALESCE(c.category, '') AS category
FROM p
LEFT JOIN c
    ON FIND_IN_SET(p.ptype, c.ptype) > 0

元のクエリでは、クロス結合を行っていました。これにより、2 つのテーブルのレコード間で可能なすべての組み合わせが生成されます。クロス結合では正解にたどり着きにくいので、左結合が望ましい。

デモはこちら:

SQLフィドル

于 2016-10-07T05:19:32.057 に答える