MySQL:在IN()函数中选择

时间:2014-05-05 13:02:19

标签: mysql

我有桌子:

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;

2 个答案:

答案 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存储一行会更好。