'IN'の不正使用

INコマンドを使用してフィールド内の文字列をすべて検索しようとしていますが、いくつかあるはずです。 私はあなたを見せる最善の方法は例であると思う:

mysql> SELECT detail_sections FROM inet_staff_details WHERE detail_sections !='';
+-----------------+
| detail_sections |
+-----------------+
| 10,11           |
| 10,11           |
| 10,11           |
| 10,11           |
+-----------------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM inet_staff_details WHERE 11 IN (detail_sections);
Empty set, 4 warnings (0.00 sec)

mysql> SELECT * FROM inet_staff_details WHERE '11' IN (detail_sections);
Empty set (0.00 sec)

ご覧のように、番号11はカンマで区切られたリストにありますが、結果には表示されません。私が間違っていることをアドバイスできますか?

乾杯。

0

5 答え

このクエリを試す -

SELECT * FROM inet_staff_details WHERE FIND_IN_SET(10, detail_sections);

FIND_IN_SET機能

4
追加された
ありがとうございました。これはトリックを完全に行いました。
追加された 著者 scampbell,

INは、指定された値(この場合は 11 )に等しい値が列にあるかどうかを調べることです(この場合は detail_sections )。

LIKE を使用して、必要な値を取得する必要があります。
すなわち、

SELECT * FROM inet_staff_details 
WHERE detail_sections LIKE '11,%'
   OR detail_sections LIKE '%,11' 
   OR detail_sections LIKE '%,11,%' 
   OR detail_sections = '11';
2
追加された
これは113、411、51124などを選ぶため-1です
追加された 著者 Brian,
@ブライアンは真ですが、それは例です。クエリは値に基づいて変更する必要がありますが、はい、私は113、411、51124などを選択しないようにクエリを変更できます
追加された 著者 Jan S,

うん、INはここであなたのために働くことはありません。 INは、基本的にここにある部分文字列ではなく、完全な値を取り出すように設計されています。あなたの問題は、これは基本的に欠陥のあるデータベース設計であり、11などの特定の値を検索するのが難しいということです。

あなたの選択は

(a)それを少し再設計する(データベースを正規化してテーブルを結合する際に読み上げる)、または

(b) search where: detail_sections = '11' or detail_sectoins LIKE '11,%' or detail_sections LIKE '%,11,%' or detail_sections LIKE '%,11'

1
追加された
最高のデザインではないと同意します。何ヶ月も前に私が思っていたことは分かっていませんでしたが、緊急のスケジュールでは即刻修正が必要です。
追加された 著者 scampbell,

このようなもの:

   select * from inet_staff_details 
   where instr(concat(',', detail_sections, ','), ',11,') > 0
0
追加された

これを試して:

SELECT * FROM inet_staff_details 
WHERE detail_sections LIKE '%,11,%'
OR detail_sections LIKE '%,11'
OR detail_sections LIKE '11,%'
OR detail_sections = '11'
0
追加された