2016-02-07 90 views
0

我有3和表ID,STAT和STATVALUE像這樣在STATVALUE數據=>SQL:查找丟失的值

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,因爲沒有STAT = 12 ID = 1

我EXISTS和子選擇嘗試,但不能成功 感謝您的任何想法。

回答

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; 
+0

感謝您的回答。實際上它不起作用,因爲它給了我所有來自STAT的值(即使不是STATVALUE中的ID),因爲交叉連接,但我會繼續向這個方向搜索 – Christian

+0

在這種情況下,請使用第二種解決方案。 –

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) 
+0

我已經測試過這樣的東西,但它不起作用,因爲總是有一行存在於其他統計數據中,並且它什麼都不返回... – Christian