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

Мне нужно выбрать из таблицы A значение столбца, которого нет в таблице LKP.Таблица поиска будет иметь список значений, хранящихся в столбце в одной записи.

Например:

Таблица LKP будет иметь нечто подобное для столбца C1 со значением 'INVALID','UNKNOWN' в одной записи.

Table A:

ID
---
Bulbasaur
Charizard
Sqirtle
UNKNOWN
Ash
INVALID

Table LKP:

RULE    C1
----    ---
 1      'UNKNOWN','INVALID'

ЖелательноВывод кода снизу:

select * from A where ID not in (select C1 from LKP where rule=1)

ID
---
Bulbasaur
Charizard
Sqirtle
Ash

Мне нужно выбрать все другие значения из table A, за исключением того, которое доступно в C1 как отдельная запись. Приведенный выше код не работает.Я получаю все записи, возвращенные из A. Должно ли значение записи для C1 быть вставлено в таблицу LKP по-другому?Это должно быть в одной записи, сопоставленной с rule=1 в where состоянии, как показано.

Пожалуйста, предложите.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы можете split и explode строку CSV, а затем сделать сравнение.

with split_values as (select rule,c1,c1_split 
                      from LKP 
                      lateral view explode(split(c1)) tbl as c1_split
                     ) 
select * from a 
where not exists (select 1 from split_values s where s.c1_split=a.id and s.rule=1)
0 голосов
/ 04 октября 2018

Я не рекомендую вам использовать not in с подзапросом.Если какое-либо из возвращаемых значений равно NULL, то в запросе вообще не возвращаются строки.

Устраняет ли not exists вашу проблему?

select a.*
from A
where not exists (select 1 from LKP where lkp.rule = 1 and lkp.c1 = a.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...