2016-11-19 23 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

我怀疑任何人会认为这是最佳的,但它会做你的问题。