假设存在一个名为“ 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
,其中也包含给定集中未包含的值。
很明显,在这么小的数据池中,丢失的值显而易见,但是可以想象表中有更多条目,而集合更大。
答案 0 :(得分:2)
您需要从一个(派生的)表开始,其中包含您要检查的值。一种显式方法是:
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);
通常,值通过查询或表产生。因此,明确声明它们是不必要的-您可以用子查询替换该部分。
答案 1 :(得分:0)
取决于可以使用的SQL语法,但是基本上您想检查表中的allvalues和多余的值。
例如:
SELECT *
FROM ALLVALUES
WHERE COLUMN NOT IN (
( select s.column from allvalues s )
and column not in ('G', 'H', 'I', 'J')
答案 2 :(得分:0)
这将起作用:
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