MySql SET交集

时间:2012-09-05 08:35:36

标签: mysql

我有下一个数据库

|   ID   |  numbers   |
|--------|------------|
|    1   | 1,2,3      |
|    2   | 4,5,6      |
|    3   | 2,3,4      |

要检索numbers包含给定数字的所有行很简单:

SELECT * FROM mydb WHERE FIND_IN_SET(3, numbers)

返回第1行和第3行

但是现在我想传递一个数组/数字集,并希望检索numbers中至少有一个数字出现的所有条目,即两个集合的交集不为空 类似的东西:

SELECT * FROM mydb WHERE SET_INTERSECT('2,4', numbers)!=NULL

这应返回所有行,因为每行包含2和/或4。

以上不起作用。这在mysql中是否可行?

谢谢!

2 个答案:

答案 0 :(得分:4)

为什么不使用OR?

SELECT * FROM mydb WHERE FIND_IN_SET(2, numbers) or FIND_IN_SET(4, numbers) 

答案 1 :(得分:1)

如果将表格结构更改为:

ID | NUMBERS

 1 | 1
 1 | 2
 1 | 3
 2 | 4
 2 | 5
 ...

SELECT DISTINCT id FROM table WHERE numbers = 2 OR numbers = 4
/*or...*/
/*WHERE numbers IN (2, 4)*/