2017-06-22 74 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语句中返回,因为它们与父项的数量不匹配具有相同外键的子项目 –