SELECT COALESCE((SELECT MAX(count) FROM b), 0) + (SELECT MAX(count) FROM a)
另一种方法是 UNION 这个 count 每个表中的值:
SELECT COALESCE(MAX(bcount), 0) + MAX(acount)
FROM (SELECT count AS acount, NULL AS bcount FROM a
UNION
SELECT NULL AS acount, count AS bcount FROM b) u
请注意,如果您使用 JOIN 它一定是一个 FULL JOIN . 如果你使用 LEFT JOIN 您可能看不到表b中的所有值。例如,考虑表b有一个条目的情况: ID=4, count=456 . 一 LEFT JOIN 在 ID 不会在结果表中包含此值(因为表a的id值仅为1、2和3),因此会得到错误的结果:
CREATE TABLE a (ID INT, count INT);
INSERT INTO a VALUES (1, 123), (2, 123), (3, 123);
CREATE TABLE b (ID INT, count INT);
INSERT INTO b VALUES (4, 456);
SELECT COALESCE(MAX(b.count), 0) + MAX(a.count)
FROM a
LEFT JOIN b ON a.ID = b.ID
输出
123 (should be 579)
使用 FULL JOIN 你会写信的
SELECT COALESCE(MAX(b.count), 0) + MAX(a.count)
FROM a
FULL JOIN b ON a.ID = b.ID
4条答案
按热度按时间ua4mk5z41#
使用左连接
n7taea2i2#
因为,table
b
是空的,max(b.count)
会回来的NULL
. 任何使用null的操作都会导致NULL
.所以,
max(a.count) + max(b.count)
为空。(this is 123 + NULL which will be NULL always)
. 因此,您的查询返回null。就用一个
coalesce
每当null出现时分配一个默认值。i2loujxw3#
使用
coalesce()
函数和显式联接,避免使用分隔表名类型的旧联接方法5f0d552i4#
你不需要使用
JOIN
,一个简单的SUM
两个子查询中的任意一个子查询将为您提供所需的结果。因为你只加了MAX(b.count)
当它是非-NULL
,我们可以一直添加,但是COALESCE
如果是,则将其设置为0NULL
.另一种方法是
UNION
这个count
每个表中的值:请注意,如果您使用
JOIN
它一定是一个FULL JOIN
. 如果你使用LEFT JOIN
您可能看不到表b中的所有值。例如,考虑表b有一个条目的情况:ID=4, count=456
. 一LEFT JOIN
在ID
不会在结果表中包含此值(因为表a的id值仅为1、2和3),因此会得到错误的结果:输出
使用
FULL JOIN
你会写信的