当我不使用(column_name)时,Mysql返回空结果

时间:2016-10-03 12:56:54

标签: mysql sql

我正在执行

select * from tbl_test where 2 in (c1)

它应该返回该行但仍然返回空行并且当我使用
select * from tbl_test where 2 in (1,2,3)

时 mysql返回一行。

 c2 | c3 | c4 |  c1
----+----+----+------
 1  | 3  | 4  | 1,2,3

2 个答案:

答案 0 :(得分:2)

你有一个很大的困惑。您将5个字符的字符串与3个整数的列表混淆。这两件事情完全不同。不要混淆他们。

然后,这种混乱导致您(或其他人)将列表存储在单个列中。在关系数据库中,列应表示单个值,而不是列表。 SQL有这种实现列表的好方法。它被称为

在MySQL中,您可以使用find_in_set()

执行所需操作
select *
from tbl_test
where find_in_set(2, col3) > 0;

但是,正确的解决方案是修复您的数据模型,以便为列表添加一个附加表。这样的表格会为您的表格中的id以及col3中的每个值提供一列 - 您的示例行有三行。

答案 1 :(得分:-1)

试试这个

select * from tbl_test where locate(concat(',',2,',') ,concat(',',c1,','))>0