SQLite-запрос с литеральными значениями

У меня есть 2 таблицы A и B в SQLite

A:

Name|Badge
----------
ABC |X
XYZ |Y

B:

ListCode |Badges
--------------------
V        |'X','Y','Z'

Я хочу сделать что-то вроде этого:

SELECT * FROM A WHERE BADGE IN (SELECT BADGES FROM B WHERE LISTCODE = 'V');

Проблема в том, что SELECT IN не работает так с литералом CSV из другой таблицы.
Как я могу это сделать ?

0

Решение

Мораль этой истории заключается в том, чтобы не хранить данные CSV, как вы это делали. Этот ответ предполагает, что вы на самом деле храните некотируемые Данные CSV, то есть это:

X,Y,Z

При этом, вы можете обойти это, используя следующий запрос:

SELECT A.*
FROM A
INNER JOIN B
ON A.BADGE = B.BADGES OR
B.BADGES LIKE A.BADGE || ',%' OR
B.BADGES LIKE '%,' || A.BADGE || ',%' OR
B.BADGES LIKE '%,' || A.BADGE
WHERE
B.BADGES IS NOT NULL

Вот демонстрация вышеупомянутого запроса. Это в MySQL, потому что Rextester не поддерживает SQLite, но логика и данные идентичны.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]