2016-08-17 73 views
2

我嘗試使用下面的查詢MySQL的,我怎麼能引用一個子查詢字段在SELECT查詢

SELECT accountNumber, 
(
    SELECT amount 
    FROM accountDebits 
    WHERE accountNumber = accounts.accountNumber 
) debits, 
(
    SELECT amount 
    FROM accountCredits 
    WHERE accountNumber = accounts.accountNumber 
) credits, 
credits - debits as balance 
FROM accounts 

計算MySQL中的賬戶餘額,但我得到這個錯誤:

Error Code: 1054. Unknown column 'credits' in 'field list'

如何我可以引用select中的子查詢別名嗎?

回答

0

與另一個子查詢,做計算把它包:

SELECT accountNumber, debits, credits, credits - debits as balance 
FROM (
    SELECT accountNumber, 
    (
    SELECT amount 
    FROM accountDebits 
    WHERE accountNumber = accounts.accountNumber 
) debits, 
    (
    SELECT amount 
    FROM accountCredits 
    WHERE accountNumber = accounts.accountNumber 
) credits 
    FROM accounts 
) x 

雖然這得到您的查詢運行起來,你會與外最好加入:

SELECT accountNumber, debits, credits, credits - debits as balance 
FROM (
    SELECT 
     a.accountNumber, 
     coalesce(sum(d.amount), 0) debits, 
     coalesce(sum(c.amount), 0) credits, 
    FROM accounts a 
    LEFT JOIN accountDebits d 
    ON d.accountNumber = a.accountNumber 
    LEFT JOIN accountCredits c 
    ON c.accountNumber = a.accountNumber 
) x 
+0

謝謝,這工作 – adrianp

+0

@AdrianP可以有多個信用或借記一個帳戶? – Bohemian

+0

是的,可以有多個,我修改查詢後使用'SUM(金額)'而不是'amount' – adrianp

0

使用table.field約定,應該工作

SELECT accountNumber, 
(
    SELECT amount 
    FROM accountDebits 
    WHERE accountNumber = accounts.accountNumber 
) debits, 
(
    SELECT amount 
    FROM accountCredits 
    WHERE accountNumber = accounts.accountNumber 
) credits, 
credits.amount - debits.amount as balance 
FROM accounts 
+0

這沒有爲我工作,我得到這個錯誤:'錯誤代碼: 1054.'字段列表'中的未知列'credits.amount' – adrianp

0

我認爲你想要這樣做:

SELECT a.*, 
     (COALESCE(credits, 0) - COALESCE(debits, 0)) as balance 
FROM (SELECT accountNumber, 
      (SELECT SUM(ad.amount) 
       FROM accountDebits ad 
       WHERE ad.accountNumber = a.accountNumber 
      ) as debits, 
      (SELECT SUM(ac.amount) 
       FROM accountCredits ac 
       WHERE ac.accountNumber = a.accountNumber 
      ) credits 
     FROM accounts a 
    ) a; 

您需要子查詢,因爲您無法在定義它們的相同SELECT中引用派生列。您需要彙總功能將所有借記/貸項合併到每個帳戶的單個值中。