我正在寻找帮助来编写一个从MySQL中检索2个表中的值的查询。
该方案
表A
ID Name Marks
===================
23 John 67
45 Mark 45
12 Ram 87
表B具有以下结构
ID Name Evaluation Marks
==============================
45 Mark 34
78 Chris 09
98 Nancy 10
23 John 12
我正在尝试编写一个查询,如果我执行以下查询
Select "SOMETHING" from Table A where Id=45
我应该将Marks Column设为45 + 34 = 79,这应该从表A和表B中获取和求和。
如果我执行Id = 12的查询。 由于Id = 12,表B中不存在,我应该将Marks标记为87。
对上述内容有什么疑问?
答案 0 :(得分:1)
我假设id只在你的表表a中出现一次,但两者都可能丢失。如果它始终存在于表a
中,则可以使用LEFT JOIN
代替UNION
。
SELECT COALESCE(SUM(marks), 0)
FROM
(
SELECT marks FROM a WHERE id = 45
UNION ALL
SELECT SUM(evaluation_marks) AS marks FROM b WHERE id = 45
) x
修改强>
如果您拥有表a中的所有用户,请使用
SELECT a.marks + COALESCE( SUM( b.evaluation_marks ), 0 )
FROM a
LEFT OUTER JOIN b ON ( b.id = a.id )
WHERE a.id = 45
GROUP BY a.id, a.marks
您应该考虑更改表格模型。为什么要存储名称和ID两次?你能不能这样做:
id name marks evaluation marks
=======================================
12 Ram 87 0
23 John 67 12
45 Mark 45 34
78 Chris 0 9
98 Nancy 0 10