我是SQL的新手,无法理解如何一次使用多个表。
我有一张这样的表:
Table1
| ID | Type |
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
这样的一个:
Table2
| ID | Qty |
| 1 | 20 |
| 3 | 40 |
| 3 | 10 |
| 2 | 30 |
| 4 | 20 |
| 1 | 10 |
我想通过按类型对它们进行排序来显示每个ID的总和数量。我可以通过ID对它们进行排序:
SELECT ID, SUM(Qty) FROM Table2 GROUP BY ID;
这很好,我得到了我应该做的:
| ID | Qty |
| 1 | 30 |
| 2 | 30 |
| 3 | 50 |
| 4 | 20 |
所以现在我正在尝试按类型进行分组,但它不起作用。我在做:
SELECT Type, SUM(Qty) FROM Table1, Table2 GROUP BY Type;
我的输出最终是:
| Type | Qty |
| A | 130 |
| B | 130 |
| C | 130 |
| D | 130 |
很明显,它只是对整个列进行求和并显示每个Type的结果。有人可以解释我是如何正确地做到这一点的吗?
答案 0 :(得分:0)
试试这个:
SELECT t1.type, SUM(t2.qty) qty FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
GROUP BY t1.type
您需要在表之间建立内部联接。通过使用FROM Table1, Table2
,您实际上将table1中的所有值与table2中的所有值进行匹配。这就是你获得这些数字的原因。
答案 1 :(得分:0)
SELECT T1.Type, SUM(T2.Qty) FROM Table1 T1, Table2 T2 where T1.ID=T2.ID GROUP BY T1.Type;
这应该有用。
答案 2 :(得分:0)
问题在于
select * from table1, table2
返回两张桌子的笛卡尔积。它将包含count(table1) x count(table2)
行,在您的情况下为4 x 6 = 24行。这不是你想要的。
有两种解决方案:
select * from table1, table2 where table1.id = table2.id
select * from table1 inner join table2 on table1.id = table2.id
联接是首选方法,并提供更多可能性。