2016-11-19 7 views
0

私はmysqlで一致する行を選択する方法は?

DataID = (786,333,500,777)のいくつかのリストを持つ
+--------+---------+------------------------------------+ 
| Id | Name |    DataID    | 
+--------+---------+------------------------------------+ 
| 1 | xyz |  111,222,333,444    | 
| 2 | xxz |  555,666,777     | 
| 3 | xyx |  888,999,000,001    | 
| 4 | yyz |  010,011,100,200    | 
| 5 | xyy |  600,500,400,300,555   | 
| 6 | yyy |  111,700,800,900    | 
| 7 | zyz |  050,0150,025,550,950,888  | 
| 8 | xzz |  800,786      | 
| 
| 
| 
| 1123 | aaa |  111,444,666,888    | 
| 1124 | bbb |  889,998,777     | 
+--------+---------+------------------------------------+ 

とも以下のようなテーブルがあります。だから私はこのリストをDataID列でチェックしたい。たとえば、行8は786のDataID列を持ち、行1は333、行5は500、行1124は& 2には777があります。ちょうど以下のように。私の悪い英語と私の質問が非常に基本的だった場合、誰か助けてください、申し訳ありません。しかし、誰か助けてください。

+--------+---------+------------------------------------+ 
| Id | Name |    DataID    | 
+--------+---------+------------------------------------+ 
| 1 | xyz |  111,222,333,444    | 
| 2 | xxz |  555,666,777     | 
| 5 | xyy |  600,500,400,300,555   | 
| 8 | xzz |  800,786      | 
| 1124 | bbb |  889,998,777     | 
+--------+---------+------------------------------------+ 

以下のような出力を期待することは感謝

+3

これで、各行に複数のデータ値がデータIDフィールドにカンマ区切りのデータとして埋め込まれていることがわかりましたか?これは良いデザインではありません。 –

+0

同意しますが、これ以外のオプションはありません。これはいくつかのレポートと分析目的のためのものです。既にProductionのテーブルは変更できません – Munna

+0

この場合、RDBMSを気にしないでください。何か他のことをする。 – Strawberry

答えて

1

はこれを試してみてください:XXZおよびBBB

を返す必要があります

SELECT name FROM table WHERE FIND_IN_SET('777', DataID) 

が、これは、データを処理するための良い方法ではありませんが、上記のコメンターに同意します。

+0

すべてのショットを取得することは可能ですか?何かこのように - > SELECT name FROM table WHERE FIND_IN_SET( '786,333,500,777'、DataID) – Munna

1

通常、別の回答は追加されませんが、同様の質問で別のひねりを尋ねました。

SELECT name FROM table WHERE CONCAT(',', DataID, ',') REGEXP ',(222|777|400),' 

と私は誰もこれが最適であると考えることはないだろう

BBB、XYZ、XXZ、XYYが返されますが、それは以下となります。必要であれば

、あなたはこれを行うことができますあなたが求めていることをやりなさい。

関連する問題