dポイントプレゼントキャンペーン実施中!

たとえば以下のようなteamtblテーブルで
チームに所属する人物をカンマ区切りでnameに登録してある場合

id | team | name
------------------------------------
1 | teamA | yamada,kobayasi,hayasi
2 | teamB | kobayasi,takizawa,komori
3 | teamC | takizawa,moriyama
4 | teamD | mori,yamada,kobayasi


「mori」さんが所属するチームのSELECTはどのようにしたらよいでしょうか?

SELECT * FROM teamtbl WHERE name LIKE '%mori%'

とした場合、「komori」「moriyama」がいるteamB、CまでSELECTされてしまいます。

A 回答 (2件)

yahoo知恵袋でも回答しましたが、テーブル設計に問題があります。


まず、「正規化」を勉強してください。
チームテーブルと選手テーブルテーブルを分ければ
select チームテーブル.team
from チームテーブル inner join 選手テーブル
on チームテーブル.team=選手テーブル.team
where 選手テーブル.name='mori'
で行けます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
既存のシステムなのでテーブル変更は不可能なのです。
今年から業務を引き継ぎ、テーブル設計に問題があるのは承知しています;;

いろいろ調べてみて、以下のような書き方にたどり着きましたが
どうでしょう?

SELECT * FROM teamtbl WHERE string_to_array(name,',') && ARRAY['mori']

お礼日時:2011/07/20 17:53

違ったら申し訳ありません。



単純に検索条件にカンマを含めて

SELECT * FROM teamtbl WHERE name LIKE '%mori,%'

ではSELECTできませんでしたか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

4 | teamD | yamada,kobayasi,mori

となる場合、SELECTされなくなってしまいます><

お礼日時:2011/07/20 17:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!