Найти пропущенное значение в таблице из заданного набора - PullRequest
0 голосов
/ 29 ноября 2018

Предположим, есть таблица с именем "allvalues" и столбцом с именем "column".Этот столбец содержит значения от «A» до «J», в то время как отсутствует «H».

Мне дан набор значений от «G» до «J».

Как я могузапросить таблицу, чтобы увидеть, какое значение моего набора отсутствует в столбце?

Следующее не работает:

select * from allvalues where column not in ('G', 'H', 'I', 'J')

Этот запрос приведет к A, B, C, D, E, F, H, который также содержит значения, невключены в данный набор.

Очевидно, что в таком небольшом пуле данных пропущенное значение заметно на глаз, но представьте больше записей в таблице и больший набор.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Зависит от того, какой синтаксис SQL вы можете использовать, но в основном вы хотите проверить все значения таблицы + дополнительные значения.

например:

SELECT *                                 
FROM ALLVALUES                           
WHERE COLUMN NOT IN (                    
( select s.column from allvalues s )     
and column not in ('G', 'H', 'I', 'J') 
0 голосов
/ 29 ноября 2018

это будет работать:

    select * from table1;
    G
    H
    I
    J

    select * from table1
    minus
    (select * from table1
    intersect 
    select column from allvalues
    )
sample input:

select * from  ns_table10;
G
H
I
J
SELECT * FROM ns_table11;
A
B
C
D
E
F
G
J
I
select * from ns_table10
minus
(select * from ns_table10
intersect 
select * from ns_table11
);

output:
H
0 голосов
/ 29 ноября 2018

Вы должны начать с (производной) таблицы со значениями, которые вы проверяете.Один явный метод:

with testvalues as (
      select 'G' as val from dual union all
      select 'H' as val from dual union all
      select 'I' as val from dual union all
      select 'J' as val from dual 
     )
select tv.val
from testvalues tv
where not exists (select 1 from allvalues av where av.column = tv.val);

Часто значения берутся из запроса или таблицы.Так что явно объявлять их не нужно - вы можете заменить эту часть подзапросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...