SQLite преобразует строку значений, разделенных запятыми, в список - PullRequest
0 голосов
/ 15 мая 2018

У меня есть поле под названием languageid, которое может содержать несколько идентификаторов, например 0,1,2,3 или одно значение, например 2. Мне нужно иметь возможность выбирать фильмы с определенным идентификатором. Я ограничен использованием функций, доступных в SQLite. Мне не разрешено реструктурировать существующую базу данных или изменять записи.

Структура

+----+-------+-------+-------------+
| id | title | genre | languageids |
+----+-------+-------+-------------+

Пример данных

+----+-----------+-----------+--------------+
| id | title     | genre     | languageids  |
+----+-----------+-----------+--------------+
| 1  | "Movie 1" | "Action"  | "1,2,5,8,10" |
+----+-----------+-----------+--------------+
| 2  | "Movie 2" | "Romance" | "2,4"        |
+----+-----------+-----------+--------------+
| 3  | "Movie 3" | "Comedy"  | "3,8,21"     |
+----+-----------+-----------+--------------+

Если бы я должен был получить все фильмы с языковым идентификатором 2, я должен был бы вернуть фильм, который имеет идентификаторы 1 и 2, но не 3. Есть ли где разбить эту строку на список, который я могу сделать "languageId IN languageids"? Если нет, есть ли альтернативное решение?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы можете попробовать это

select * from tablename where ',' || languageids || ',' like '%,2,%'

, это даст вам все записи, содержащие идентификатор языка 2

0 голосов
/ 15 мая 2018
with t (id,title,genre,languageids)
as (
select 1,      'Movie 1',        'Action',      '1,2,5,8,10' union all
select 2,      'Movie 2',        'Romance',     '2,4'        union all
select 3,      'Movie 3',        'Comedy',      '3,8,21'
)
select * from t where (',' + languageids + ',') like '%,2,%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...