3

这很可能是 SQL 初学者的问题。是否可以在数学表达式中使用选择?

例如,我有两个表: - 表 A 有一个名为 id (主键)的列和另一个名为 val_A 的列 - 表 B 有一个名为 id (主键)的列和另一个名为 val_B 的列

我想做类似的事情:

select ((select val_A from A where id = 1) +
    (select val_B from B where id = 1)) as final_sum;

我正在使用 MySQL,它正在抛出错误。我假设这是因为选择的结果是一个集合,我希望 val_A 和 val_B 的数值成为总和。

有没有办法做到这一点?

谢谢!

4

4 回答 4

4

您的查询:

select ((select val_A from A where id = 1) +
        (select val_B from B where id = 1)
       ) as final_sum

在 MySQL 中是正确形成的 SQL(假设表和列存在)。

但是,它假定每个子查询只返回一行。如果没有,您可以使用limitor 之类的函数强制它min()or max()

select ((select val_A from A where id = 1 limit 1) +
        (select max(val_B) from B where id = 1)
       ) as final_sum

或者,您可能正在尝试获取两个表中 id = 1 的所有行的总和:

select ((select sum(val_A) from A where id = 1) +
        (select sum(val_B) from B where id = 1)
       ) as final_sum
于 2013-03-01T20:50:56.673 回答
2

是的,您可以这样做,但更合适的查询格式是:

SELECT (a.val_a + b.val_b) as final_sum
FROM a INNER JOIN b ON a.id = b.id
WHERE a.id = 1
于 2013-03-01T20:49:57.573 回答
0

我不确定为什么它不起作用,但您可以尝试以下方法:

select (val_A + val_B) as final_sum from A,B where A.id=1 and B.id=1;
于 2013-03-01T20:52:32.297 回答
0

分解并测试您的查询

选择1+1

所以你的陈述只是没有选择。这将运行 -

select ((select sum(val_A) from A where id = 1) +
(select sum(val_B) from B where id = 1)) as final_sum;
于 2013-03-01T20:52:35.217 回答