MySQL中需要数据库查询帮助

时间:2010-01-12 09:04:55

标签: sql database mysql

我正在寻找帮助来编写一个从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。

对上述内容有什么疑问?

1 个答案:

答案 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