すべてのタグが与えられたデータベース内のすべての行を取得するクエリMySQL
を作成しようとしています。(A、B、Z)IN(A、B、C、E、Z)
WHERE "tag1" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)
これはつのタグのため正常に動作しますが、私は複数のタグを持っている場合、私はので、このクエリを貼り付け何度もコピーしてAND
でそれらを結合したくない:私はこれを持っている時点では
すべてのタグを複数回選択するのが遅いようです。
このようなことができる方法はありますか? TAG1、TAG2、TAG3:私のクライアントはすべてのタグを持っていることを意味
WHERE ("tag1", "tag2", "tag3") IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)
。
最後のクエリを実行しようとすると、私はこのエラーを受け取ります:Operand should contain 3 column(s)
。
だから、私の現在のソリューションは、このようなものになるだろう:
WHERE "tag1" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)
AND "tag2" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)
AND "tag3" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)
全く最適ないないようです。
テーブル構造:
client [id, name]
tag_list [FK id references client.id, tag]
したがって、各クライアントが複数のタグを持つことができ、私は与えられたすべてのタグを持つクライアントを取得したいです。
あなたはSELECT * FROMクライアントLEFT JOINを使用できませんtag_list ON tag_list.id = client.id tag1はNULLではなく、tag2はNULLではなく、tag3はNULLではありません。 ' – Justinas
'tag1'は列名ではありません。 'tag_list'テーブルの' tag'カラムの行の値です。 – Cristy
http://stackoverflow.com/questions/31860162/mysql-select-groups-having-values-covering-a-setを見てください。 – Solarflare