2017-06-22 26 views
0

比方說,我有2個表:表1之間的SQL查詢的差異相比,外鍵引用表2的總和子項目

表1

ID Name Quantity 
1  Pencil  12 
2  Pen   35 
3  Ruler   50 

表2

ID Name Quantity FK_Table1 
1  Pencil   6   1 
2  Pencil   6   1 
3  Pen   10   2 
4  Pen   5   2 
5  Pen   5   2 
6  Pen   5   2 
7  Ruler   12   3 
8  Ruler   12   3 
9  Ruler   12   3 
10  Ruler   12   3 
  • 我需要d進行查詢,該查詢僅選擇來自數量列的table1中的行,其與表2中具有相同FK_Table1值的所有數量列的總和不匹配

    (例如,由於表1中的數量爲12,所以鉛筆將不會被選中,與表2中的行ID#1和2的數量總和相同)。

  • 我需要做的是選擇表2行,而不是表1的查詢,但同樣的規則適用

我怎樣才能做到這一點?

+0

你嘗試過什麼做的(請發表您的查詢腳本)? – etsa

回答

2

試試下面的查詢:

select * from table1 t1 
where t1.Quantity <> (select sum(t2.Quantity) from table2 t2 where t2.FK_Table1 = t1.ID); 

爲了得到表2的記錄:

select * from table2 where FK_Table1 IN(
    select t1.ID from table1 t1 
    where t1.Quantity <> (
    select sum(t2.Quantity) from table2 t2 where t2.FK_Table1 = t1.ID 
    ) 
); 
+0

你能解決table2而不是table1嗎? –

+0

然後會有相同項目的多行。你想要那個 ? –

+0

我不確定我是否理解你的意思,但我試圖實現的是顯示table2,ID爲3-10的行應在SELECT語句中返回,因爲它們與父項的數量不匹配具有相同外鍵的子項目 –