2016-08-17 10 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 
     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

はい、複数存在する可能性があります。後で 'amount'の代わりに' SUM(amount) 'を使用するようにクエリを修正しました – adrianp

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, 
(
    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. 'フィールドリスト'の 'クレジット.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の派生列を参照できないため、サブクエリが必要です。すべての借方/貸方を各アカウントの単一の値にまとめる集約関数が必要です。

関連する問題