2011-03-09 93 views
1

“IN”查询不起作用。请指导我,如果我错了。在SQLite中查询

KaizenResultsInformationTable是具有字段“recordinfo”的MasterTable,该字段包含子表Ids作为字符串。 kaizenResultsRecordInformationTable是具有字段“recordId”的Childtable。

我必须匹配孩子的记录。

查询:

select recordinfo from KaizenResultsInformationTable 

输出:; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10

查询:

select substr(replace(recordinfo,';','","'),3,length(recordinfo)) 
from KaizenResultsInformationTable` 

输出:“0”,“1”,“2”,“3”,“4”,“5”

此查询不起作用:

select * from kaizenResultsRecordInformationTable 
where substr(recordid,0,2) in (
    select substr(replace(recordinfo,';','","'),3,length(recordinfo)) 
    from KaizenResultsInformationTable 
) 

此查询工作:

select * from kaizenResultsRecordInformationTable 
where substr(recordid,0,2) in ("0","1","2","3","4","5") 

回答

3

不能使用in这样。在第二个查询中,您传递的是包含逗号分隔值列表的单个字符串in

最好将ID列表表示为每个值的一个记录。

此外,我不知道为什么你要记录你的recordid的子串。您通常应该每列存储一个值。

但是,如果您无法更改架构,则可以使用'like'而不是'in'进行字符串匹配。像这样的东西应该工作:

select a.* from kaizenResultsRecordInformationTable a 
join KaizenResultsInformationTable b 
    on (';'+b.recordinfo+';') LIKE ('%;'+trim(substr(recordid,0,2))+';%') 

因此,如果您recordinfo看起来像1;2;3;4;5;6,你的substr(recordid,0,2)看起来像1,这将包括该行如果";1;2;3;4;5;6;" LIKE "%;1;%",这是真的。

+0

谢谢Blorgbeard,kaizenResultsRecordInformationTable有10条记录,recordid是1,2,3 ... 10。但是这个查询只能获取第一条记录。 – vadivelu 2011-03-09 12:38:27

+0

@Gnanavadivelu是一个数字或字符串的记录ID?尝试用'recordid'替换上述查询中的'substr(recordid,0,2)'。 – Blorgbeard 2011-03-09 12:58:49

+0

recordid是号码 – vadivelu 2011-03-09 15:00:16