2011-10-19 8 views
2

私はかなりSQLに新しいといくつかのコードを見ています。テーブルからアイテムを取得するための基本的な構造を見ることができます。ここで、column = "Apples"などです。"、"セパレータを使用してSQLデータベースからデータを照会

select * from fruitsTable where fruit="apple" 

データができた場合は

apple 
orange 
apple,orange 
pear 
apple,pear 

は、そのクエリを作成する方法はありますか?私はリンゴ、オレンジ、リンゴ、パイは本当に意味をなさないと知っていますが、基本的にデータベースからデータを除外しようとしています。時にはそれが単なるものであり、それ以外のときは2つのカテゴリです。どのようにしてデータベースをフィルタリング/クエリするのですか?ありがとう。そのクエリが何

+0

どのデータベースとバージョンですか? –

答えて

1

MySQLを使用している場合は、WHERE FIND_IN_SET('apple', fruit)を使用できます。

他のデータベースの場合は、WHERE (',' || fruit || ',') LIKE '%,apple,%'を使用できます。

どちらの場合も、クエリはインデックスを使用できません。テーブルが大きい場合はインデックスが遅くなります。

+0

+1はよく見落とされる単純な答えです。これは索引のパフォーマンスに何らかの影響を及ぼしますか? – Seph

0
select * 
from fruitsTable 
where fruit like '%apple%' 

は、文字列のどこかfruitフィールドに「りんご」を持つすべてのレコードを返すことです。

N.B.このようなデータベースは設計しないでください。 コンマで区切られた値は、悪いデータベースを作成する簡単な方法です。

+1

これは 'Pineapple'にもマッチします。LIKEを使うには、' '、'&fruit& '、' LIKE '%、apple、%' 'のようなものが必要です。そしてはい、これは非常に悪いデザインです。関連する行が関連するキーを共有する複数の行を持つ方がよい。 – MatBailie

+0

@Dems良い点。 –

関連する問題