2011-03-09 91 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