我有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和子选择,但无法成功 谢谢你的任何想法。
答案 0 :(得分:1)
这是方法。生成id
和stat
的所有组合。然后找出你没有的。第一个使用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)