SQL-从具有两个或更多"实例的表中选择一列"在另一张表中

时间:2018-06-10 19:56:02

标签: sql

  1. 我将此table1与列t1_id作为PK。
  2. 我将table2t1_id_1t1_id_2作为来自table1的FK。 table2也有列qty_t1qty_t2,因此我可以存储用于每个'实例的数量。 t1_id
  3. 我还将此table3t1_id作为FK从table1和列t1_qty存储与其关联的数量。
  4. 到目前为止一切顺利。但是......现在我需要一份报告来比较t1_idtable2中是否存储了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中}。

    这是我在帖子中写下来时最明确和最通用的方式。希望你能帮助我解决这个问题。

1 个答案:

答案 0 :(得分:1)

您基本上想要LEFT JOIN table2table3table1GROUP 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的两个值。如果没有,你将不得不拆分总和和计数的加法。)