2016-11-19 33 views
0

我有表像下面如何在mysql中選擇匹配的行?

+--------+---------+------------------------------------+ 
| 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 = (786,333,500,777)一些名單。所以現在我想用DataID列檢查這個列表。例如,現在第8行在DataID列中有786,第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

那麼你告訴我們每行都有多個嵌入DataID字段的數據值作爲逗號分隔的數據?這不是一個好設計。 –

+0

同意但我現在沒有選擇,除了這個,這是爲了一些報告和分析目的,我問。已在生產中的表不能更改 – Munna

+0

在這種情況下,請不要打擾RDBMS。做別的事。 – Strawberry

回答

1

試試這個:

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

應該返回XXZ和bbb

與上述評論者同意,這不是處理數據的好方法。

+0

是否有可能全部投入?像這樣的東西 - > SELECT名稱從表WHERE FIND_IN_SET('786,333,500,777',DataID)獲得所有相關行 – Munna

1

通常不會添加另一個答案,但您對類似問題有不同的要求。

如果你願意,你可以這樣做:

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

,你會回來的xyz,XXZ,XYY,BBB

我懷疑任何人會認爲這是最佳的,但它會做你的問題。