table1
与列t1_id
作为PK。table2
列t1_id_1
和t1_id_2
作为来自table1
的FK。 table2
也有列qty_t1
和qty_t2
,因此我可以存储用于每个'实例的数量。 t1_id
。table3
列t1_id
作为FK从table1
和列t1_qty
存储与其关联的数量。到目前为止一切顺利。但是......现在我需要一份报告来比较t1_id
和table2
中是否存储了table3
,如果是,那么SUM
和{{1}是什么每个人的平衡。它看起来像是:
COUNT
我是SQL的初学者,我以前从未需要解决这种情况。我的尝试是:
|SUM from table3 | SUM from table2 | SUM Dif | Same with COUNT |..
t1_id1 | 15 | 7 | 8 | '' |..
t1_id2 | 45 | 50 | -5 | '' |..
t1_id3,4,n.....
我无法弄清楚如何加入select SUM(t3.t1_id),SUM(t2.t1_id1),SUM(t2.t1_id2),..same with COUNT
from table1 t1,table2 t2,table3 t3 where t1.t1_id=t3.t1_id and
(t1.t1_id=t2.t1_id1 or t1.t1_id=t2.t1_id2) GROUP BY ...
,所以我得到一个包含项目总和的列,无论它是SUM(t2.t1_id1),SUM(t2.t1_id2)
还是t1_id1
都存储在t1_id2
中}。
这是我在帖子中写下来时最明确和最通用的方式。希望你能帮助我解决这个问题。
答案 0 :(得分:1)
您基本上想要LEFT JOIN
table2
和table3
到table1
,GROUP BY
ID并使用sum()
和count()
。像这样:
SELECT t1.t1_id,
sum(t3.t1_qty) "SUM from table3",
sum(t21.qty_t1) + sum(t22.qty_t2) "SUM from table2",
sum(t3.t1_qty) - sum(t21.qty_t1) - sum(t22.qty_t2) "SUM Dif",
count(t3.t1_id) "COUNT from table3",
count(t21.t1_id_1) + count(t22.t1_id_2) "COUNT from table2",
count(t3.t1_id) - count(t21.t1_id_1) + count(t22.t1_id_2) "COUNT Dif"
FROM table1 t1
LEFT JOIN table2 t21
ON t2a.t1_id_1 = t1.t1_id
LEFT JOIN table2 t22
ON t22.t1_id_2 = t1.t1_id
LEFT JOIN table3 t3
ON t3.t1_id = t1.t1_id
GROUP BY t1.t1_id;
(我假设你同时想要table2
的两个值。如果没有,你将不得不拆分总和和计数的加法。)