2010-01-12 51 views
0

我正在寻找帮助来编写MySQL中的2个表中检索值的查询。MySQL中需要数据库查询帮助

的方案是

表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 

我应该得到商标柱45 + 34 = 79,应取和总和从两个表A和表B中

如果我执行与的Id = 12查询。 由于ID = 12,不存在于表B,我应该得到的商标为87

什么会为上述查询?

+0

请参阅我编辑的答案。 – 2010-01-12 10:08:40

回答

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 

编辑

如果你在表中的所有用户,然后用

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 name marks evaluation marks 
======================================= 
12 Ram  87  0 
23 John 67  12 
45 Mark 45  34 
78 Chris 0  9 
98 Nancy 0  10 
+0

您的数据库更改是有效的,我会更改表结构,这将缓解我的开发工作,感谢您的建议 – gmhk 2010-01-12 09:56:54

+0

我选择在单独的表中存储是允许多次评估标记可以存储为特定的id,你给出的想法,如果我们使用,那么我将不能存储多次选定的ID – gmhk 2010-01-12 10:02:55

+0

@harigm:那么你至少应该从第二个表中删除名称。查看我更新的答案(在第二个SELECT中添加SUM)以允许多个评估标记。请尝试。 – 2010-01-12 10:05:17