8

我有下一个数据库

|   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中可能吗?

谢谢!

4

2 回答 2

4

为什么不使用 OR ?

SELECT * FROM mydb WHERE FIND_IN_SET(2, numbers) or FIND_IN_SET(4, numbers) 
于 2012-09-05T08:38:36.077 回答
0

如果将表结构更改为:

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)*/
于 2012-09-05T08:40:04.970 回答