0

我是 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 |

很明显,它只是对整个列求和并显示每种类型的结果。有人可以解释我如何正确地做到这一点吗?

4

3 回答 3

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 中的所有值匹配。这就是为什么你会得到这些数字。

于 2013-10-16T04:38:20.853 回答
0
SELECT T1.Type, SUM(T2.Qty) FROM Table1 T1, Table2 T2 where  T1.ID=T2.ID GROUP BY T1.Type;

这应该有效。

于 2013-10-16T04:40:40.417 回答
0

问题是

select * from table1, table2 

正在返回两个表的笛卡尔积。它将包含count(table1) x count(table2)行,在您的情况下是 4 x 6 = 24 行。这不是你想要的。

有两种解决方案:

  1. 添加条件:select * from table1, table2 where table1.id = table2.id
  2. 使用连接:select * from table1 inner join table2 on table1.id = table2.id

联接是首选方法,并提供更多可能性。

了解有关联接的更多信息

于 2013-10-16T04:43:56.510 回答