SQL:找到缺失的值

时间:2016-02-07 13:16:13

标签: sql

我有3个表ID,STAT和STATVALUE,其中包含STATVALUE =>中的数据

ID STAT VALUE
1  10   50
1  11   60
2  10   20
2  11   30
2  12   40
3  10   10
3  11   10
3  12   10

我想用结果集检索缺少的STAT,如:

10 1 
11 1 
12 0

在这种情况下,它将是12,因为ID = 1

没有STAT = 12

我尝试过EXISTS和子选择,但无法成功 谢谢你的任何想法。

2 个答案:

答案 0 :(得分:1)

这是方法。生成idstat的所有组合。然后找出你没有的。第一个使用cross join。并且,以下查询使用left join作为第二部分:

select i.id, s.stat
from id i cross join
     stat s left join
     statvalue sv
     on sv.id = i.id and sv.stat = s.stat
where sv.id is null;

如果您只有一张桌子,也可以这样做:

select i.id, s.stat
from (select distinct id from statvalue) i cross join
     (select distinct stat from statvalue) s left join
     statvalue sv
     on sv.id = i.id and sv.stat = s.stat
where sv.id is null;

答案 1 :(得分:0)

默认情况下,将2个表放在FROM子句中将导致所有记录的交叉连接。我们只需要一个where子句来查找STATVALUE中缺少的组合

select i.id, s.stat
from id i, stat s
where not exists (select 1 from statvalue sv where sv.id = i.id and sv.stat = s.stat)