[table p]
p_id
――
5
8
[table a]
a_id | p_id | text_field
――――――――
1 | 5 | あいうえお
2 | 5 | かきくけこ
3 | 8 | かきくけこ
[table b]
b_id | p_id | text_field
――――――――
1 | 5 | さしすせそ
2 | 8 | たちつてと
====================
table pは、親テーブルで、table aとtable bは子です。
この状態で、
"き"
かつ
"く"
かつ
"す"
かつ
"せ"
が子供のテーブルのtext fieldに含まれるp_idをSELECTしたいと思います。
(考え方が難しいのですが、求める答えは5のみです)
SQL文をお願いします。
下記のものでいかがでしょうか。
SELECT p.p_id FROM p, (SELECT p_id, Group_Concat(text_field Separator '') AS text_field FROM (SELECT * FROM a UNION SELECT * FROM b) AS temp1 GROUP BY p_id) AS temp2 WHERE p.p_id = temp2.p_id AND text_field LIKE '%き%' AND text_field LIKE '%く%' AND text_field LIKE '%す%' AND text_field LIKE '%せ%' ;
この例だとテーブル p を使う必要はないのですが、あえて JOIN しています。実際にはテーブル p には他のカラムが入っていて、それも使いたいと考えられるからです。
(mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2)
おお!すごい。
何度考えても出口が見えなかったので、別の方法を考え出していました。
ありがとうございます。
Group_Concatというのを知りませんでした。
早速試してみます。