我正在执行
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
答案 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