我有一个名为"users"的sql表
在这个表中有一个名为"Cities"的列,里面有一个数组(1,2,3,…)
第一行:"1、2、15、69、98"
row2:"7、9、15 69"
row3:"7、3、1、5、6"
如何选择在同一时间有多个值的行
for exp:我想选择包含1的行
结果应该显示row1和row3。
你可以参考这里
SELECT *
FROM users
WHERE INSTR(cities, '1',1)>0;
Use FIND_IN_SET:
SELECT *
FROM users
WHERE FIND_IN_SET('1', Cities) > 0
正如其他人所提到的,在users
表中存储CSV数据是次优的,因为它破坏了数据库所具有的许多关系功能。但如果你必须继续这样做,FIND_IN_SET
可能会让你这样做。
即使可以,我还是强烈建议在列中存储单个值。
SELECT *
FROM users
where Concat(',',col,',') like '%,1,%'
对于另一种方法,我使用LIKE
发布了这个答案。但是Tim的FIND_IN_SET
在这里是一个更好的方法
我想很简单,它应该可以满足你的要求:
SELECT *
FROM users
WHERE Cities LIKE '%1,%'