У меня есть 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 из другой таблицы.
Как я могу это сделать ?
Мораль этой истории заключается в том, чтобы не хранить данные 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, но логика и данные идентичны.
Других решений пока нет …