我有桌子:
tasks_whatwhom | CREATE TABLE tasks_whatwhom (
id int(3) NOT NULL AUTO_INCREMENT,
name varchar(150) NOT NULL,
message varchar(255) NOT NULL,
filial_list text,
client_list text,
PRIMARY KEY (id),
UNIQUE KEY name (`name`)
) ENGINE=Aria AUTO_INCREMENT=53 DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1
字段filial_list
看起来像'12,14'
。
还有另一张表filials
,其中包含有关孝顺的附加信息。
SQL语句:
select * from filials where id IN(14,12) and status=1;
按预期工作但低于 - 返回零。我不明白为什么?
select * from filials where id IN(select filial_list from tasks_whatwhom) and status=1;
答案 0 :(得分:0)
select * from filials where id IN(select filial_list from tasks_whatwhom) and status=1;
嗯......您必须拥有一个等于Filial_list值的ID,并且filials.status值为1
您的查询有效但您的标准却没有。首先,filials_list是一个文本字段,ID字段是int。那你为什么期待比赛?
其次,您在该字段中存储逗号分隔值,该值在int上不匹配。
每次都需要解析该列,提取数字,然后查看是否匹配。
答案 1 :(得分:0)
您的数据库设计不好,不应该以逗号分隔的方式存储数据,而是应该为每个相关数据存储一行。
您的案例中的一个解决方案是
select
f.*
from
filials f
inner join tasks_whatwhom tww on find_in_set(f.id,tww.filial_list);
除此之外,如果您更改数据库结构并将filial_list
更改为int
并为filials
中的每个引用ID存储一行会更好。