我有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和子選擇嘗試,但不能成功 感謝您的任何想法。
我有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和子選擇嘗試,但不能成功 感謝您的任何想法。
這裏是方法。生成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;
把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)
我已經測試過這樣的東西,但它不起作用,因爲總是有一行存在於其他統計數據中,並且它什麼都不返回... – Christian
感謝您的回答。實際上它不起作用,因爲它給了我所有來自STAT的值(即使不是STATVALUE中的ID),因爲交叉連接,但我會繼續向這個方向搜索 – Christian
在這種情況下,請使用第二種解決方案。 –