2013-03-01 20 views
3

這很可能是SQL中的初學者問題。是否可以在數學表達式中使用select?選擇數學函數內部

例如,我有兩個表: - 與命名id列(主鍵)表B和命名val_B

另一列 - 與命名id列(主鍵),並命名爲val_A 另一列表A中

我想要做的事,如:

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

我使用MySQL和它引發錯誤。我假設這是因爲select的結果是一個集合,我希望val_A和val_B的數字值是總和。

有沒有辦法做到這一點?

謝謝!

+0

你舉的例子只是罰款:http://www.sqlfiddle.com/#!2/dadc1/1 – mellamokb 2013-03-01 20:48:41

+0

有什麼錯誤,因爲這句法應該工作,假設子查詢只返回一個單行/每個字段。 – 2013-03-01 20:49:45

+0

現在你困惑了我......這不是在我這裏工作...:x – Sagito 2013-03-01 20:50:07

回答

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 
+0

。 。儘管這可能是提問者想要的,但在表格之間存在重複的情況下(這可能是問題的一部分),不清楚該怎麼辦。 – 2013-03-01 20:55:23

4

,你必須查詢:

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

是正確形成SQL在MySQL(假設表和列存在)。

但是,它假定每個子查詢只返回一行。

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行的總和兩個表中:如果沒有,你可以使用limit或類似min()max()功能強制

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

我試圖用max來看它會工作,但它拋出了相同的錯誤......要麼我在這裏很愚蠢(並沒有看到明顯的錯誤),或者這個版本的MySQL被破壞...:/ – Sagito 2013-03-01 21:29:48

0

我不知道爲什麼它不工作,但你可以嘗試這樣的:

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

打破和測試您的查詢

select 1 + 1

所以你的陳述只是沒有選擇。這將運行 -

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

只有在A和B表都有**且只有一個帶有id = 1的**行時,它纔會運行。 – 2013-03-01 20:55:26

+0

這裏有一個[演示](http://sqlfiddle.com/#!2/68d41/1)當你有多於1 – 2013-03-01 20:56:23

+0

的編輯時,你會得到錯誤:) – 2013-03-01 20:58:50