В запросе в SQLite - PullRequest
       2

В запросе в SQLite

1 голос
/ 09 марта 2011

Запрос "IN" не работает. Пожалуйста, ведите меня, если я ошибаюсь.

KaizenResultsInformationTable - это MasterTable, имеющая поле «recordinfo», это поле содержит идентификаторы дочерней таблицы в виде строки. kaizenResultsRecordInformationTable - это дочерняя таблица, имеющая поле "recordId".

Я должен сопоставить записи ребенка.

Запрос:

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")

1 Ответ

3 голосов
/ 09 марта 2011

Вы не можете использовать in таким образом. Во втором запросе вы передаете in единственную строку, содержащую список значений через запятую.

Лучше представлять список идентификаторов в виде одной записи для каждого значения.

Кроме того, я не уверен, почему вы берете подстроку вашего 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;%", что является истинным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...