2010-01-12 47 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