Как выбрать записи (которые имеют значения, разделенные запятыми), которые не имеют значения из возвращенного подзапроса? - PullRequest
0 голосов
/ 25 февраля 2019

ОБНОВЛЕНИЕ Ссылка SQL FIDDLE https://www.db -fiddle.com / f / 9t63on5kYWUNrHqXkThb1P / 4

Вывод должен давать только следующее (строка 2 таблицы1)

I0016,I0028,I0045,I0056,I0215,I0321,I0361,I0369,I0420

Мне следует

select column1 from table1 
where <any comma separated value in column1> not in
(select col2 from table2 where col1 = 'e')

Предпочтительным решением является собственный SQL, и ничего не зависит от поставщика.При необходимости помогают функции spark sql.

ПРИМЕЧАНИЕ. Я понимаю, что это плохой дизайн, но это не в моих руках.

NOTE Таблица в FIDDLE созданаиспользуя настройки по умолчанию MySQL.Я не знаю, как создаются таблицы на бэкэнде.Вот почему я уточняю, что это не должно зависеть от поставщика.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Следующий коррелированный подзапрос работает для моего случая.Можете проверить это в скрипте выше.

select *
from table1 as t1
where (
    select  t2.col2
    from    table2  as  t2
    where   t1.column1 like concat('%', t2.col2 ,'%')
    and t2.col1 = 'e'
    limit 1
    ) is NULL;
0 голосов
/ 25 февраля 2019

Вы должны исправить свою структуру данных!Хранение списков значений в одном столбце не является подходящим способом хранения данных в SQL.Вы должны использовать таблицу соединений / связей.

Вы можете делать то, что хотите, используя not exists:

select t1.column1
from table1 t1
where not exists (select 1
                  from table2 t2
                  where ',' || t1.column || ',' like '%,' || t2.value || ',%'
                 )

SparkSQL также может поддерживать find_in_set(), в этом случае вы можете сделать:

select t1.column1
from table1 t1
where not exists (select 1
                  from table2 t2
                  where find_in_set(t1.column, t2.value) > 0
                 )

Здесь - это дб <> скрипка.

...