0

我想运行一个有点复杂的 mySQL 查询,但我在思考如何编写它时遇到了麻烦。

基本上我有三个表:

a(aid, name);
b(bid, val);
ab(aid, bid)

我想要做的是创建一个创建这样的表的查询:

c(aid, valSum);

我希望 valSum 从 0 开始,并添加援助和出价之间每个关系的 bid.val 的值。

例如:

a:
+-----+------+
| aid | name |
+-----+------+
| 1   |  Joe |
| 2   |  Jon |
| 3   |  Max |
+-----+------+

b:
+-----+-----+
| bid | val |
+-----+-----+
| 1   |   2 |
| 2   |   4 |
| 3   |   6 |
+-----+-----+

ab:
+-----+-----+
| aid | bid |
+-----+-----+
| 1   |   1 |
| 1   |   2 |
| 2   |   2 |
| 2   |   3 |
| 3   |   1 |
| 3   |   2 |
| 3   |   3 |
+-----+-----+

c:
+-----+--------+
| aid | valSum |
+-----+--------+
| 1   |      6 |
| 2   |     10 |
| 3   |     12 |
+-----+--------+
4

2 回答 2

4

如下所示:

SELECT a.aid, SUM(b.val) AS valSum
FROM a
INNER JOIN ab ON a.aid = ab.aid
INNER JOIN b ON ab.bid = b.bid
GROUP BY a.aid
于 2013-05-01T03:34:38.860 回答
1

您根本不需要加入表格a

SELECT ab.aid, sum(b.val) AS valSum
FROM   ab
JOIN   b USING (bid)
GROUP  BY 1;

...除了列出a没有任何匹配项的行ab。但是,您必须LEFT JOIN在这种情况下使用:

SELECT a.aid, sum(b.val) AS valSum
FROM   a
LEFT   JOIN ab USING (aid)
LEFT   JOIN  b USING (bid);
GROUP  BY 1;

valSumNULL用于那些行。

于 2013-05-01T04:42:47.240 回答