“IN”查询无效。如果我错了,请指导我。
KaizenResultsInformationTable是具有字段“recordinfo”的MasterTable,该字段包含Child表ID作为字符串。 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")
答案 0 :(得分:3)
你不能那样使用in
。在第二个查询中,您将传递in
一个包含以逗号分隔的值列表的字符串。
最好将ID列表表示为每个值的一条记录。
另外,我不确定你为什么要记录你的记录字符串。您通常应该每列存储一个值。
但是,如果您无法更改架构,则可以使用字符串匹配“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;%"
就会包含该行,这是真的。