在SQLite中查询
问题描述:
“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")
答
不能使用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;%"
,这是真的。
谢谢Blorgbeard,kaizenResultsRecordInformationTable有10条记录,recordid是1,2,3 ... 10。但是这个查询只能获取第一条记录。 – vadivelu 2011-03-09 12:38:27
@Gnanavadivelu是一个数字或字符串的记录ID?尝试用'recordid'替换上述查询中的'substr(recordid,0,2)'。 – Blorgbeard 2011-03-09 12:58:49
recordid是号码 – vadivelu 2011-03-09 15:00:16