MySQL - WHERE x IN(列)

问题描述 投票:0回答:4

我试了一下。这是SQL Fiddle中的一个简单示例:Example

有一列someNumbers(逗号分隔的数字),我试图获取此列包含特定数字的所有行。问题是,结果只包含someNumbers以特定数字开头的行。

查询SELECT * FROM myTable where 2 in ( someNumbers )仅返回id为2的行,而不返回id为1的行。

有什么建议?谢谢你们。

mysql sql
4个回答
4
投票

您以错误的格式存储数据!您不应该在单个字符串列中存储多个值。您不应该将数字存储为字符串。相反,你应该有一个联结表,每个idnumber有一行。

有时,你别无选择,因为其他人创建了一个设计非常糟糕的数据库。对于这些情况,MySQL具有find_in_set()功能:

SELECT *
FROM myTable 
WHERE find_in_set(2, someNumbers ) > 0;

然而,正确的解决方案是修复数据模型。


4
投票

虽然戈登的回答是好的,但这是用like做到这一点的方法

SELECT * FROM myTable where someNumbers like '2,%' or someNumbers like '%,2,%' or someNumbers like '%,2'

第一个like检查您的阵列是否以您要查找的数字开头(2)。第二个检查2是否在数组内,最后一个like测试结束时的外观。

请注意,逗号在这里是必不可少的,因为像'%2%'这样的东西也会匹配...,123,...

编辑:正如OP所建议的那样,行中可能只有一个值。因此,查询必须通过执行... someNumbers = '2'来检查这种情况


0
投票

我建议这个查询:

    SELECT * FROM myTable where someNumbers like '%2%'

它将选择someNumbers包含'2'的每个条目


0
投票
Select * from table_name where coloumn_name IN(value,value,value)

你可以用它

© www.soinside.com 2019 - 2024. All rights reserved.