2016-05-19 10 views
0

4つのテーブルから合計数を選択する非常に長いMYSQLクエリがありますが、サブクエリの1つで複数の行が返され、エラーが発生します。
これは私のクエリです:このクエリで解決方法サブクエリは複数の選択で1行以上のエラーを返します

select created, 
    (select coalesce(sum(equal_to_dollar), 0) from capitals group by created) as capital, 

    (select coalesce(sum(incoming), 0) - coalesce(sum(outgoing), 0) from transactions where currency = 'دالر') + 
    (select coalesce(sum(equal_to_dollar), 0) from transactions where incoming != 0) - 
    (select coalesce(sum(equal_to_dollar), 0) from transactions where outgoing != 0) as total_transaction, 

    (select coalesce(sum(incoming), 0) - coalesce(sum(outgoing), 0) from temporary_clients where currency = 'دالر') + 
    (select coalesce(sum(equal_to_dollar), 0) from temporary_clients where incoming != 0) - 
    (select coalesce(sum(equal_to_dollar), 0) from temporary_clients where outgoing != 0) as total_temp_client, 

    (select coalesce(sum(outgoing), 0) - coalesce(sum(incoming), 0) from money_transmission where currency = 'دالر') + 
    (select coalesce(sum(equal_to_dollar), 0) from money_transmission where outgoing != 0) - 
    (select coalesce(sum(equal_to_dollar), 0) from money_transmission where incoming != 0) as total_transmission, 

    (select coalesce(total_transaction + total_temp_client + total_transmission, 0)) as total, 

    (select capital - abs(coalesce(total_transaction + total_temp_client + total_transmission, 0))) as result 
    from capitals group by created 

つの値以上のものを返し、as capitalで終わる最初のサブクエリは、1つの値以上を返すcreated最初の選択。
このクエリは、データベース内の各日付について、他の3つのテーブルの合計を持つ資本の計算結果を返す必要があります。
同じエラーがあり、INまたはinner joinwhere句に使用している質問が多数確認されていますが、私のケースは異なり、何をすべきかわかりません。
どうすればこの問題を解決できるかご了承ください。
はあなたに感謝:)

+0

エラーメッセージはクリアです。1つ以上のサブクエリが複数のレコードを返しています。ロジックをクリーンアップしてこれを修正するのが最良のポジションです。 –

+0

私は私の質問で述べたように、最初のサブクエリは複数のレコードを返し、これを知っていますが、これは他のすべてのテーブルの合計から毎日の資本を差し引いて毎日の単一の値を受け取る必要があるためです。 – AliDK

+0

スカラーの加算と減算を行うことができないため、クエリは論理的には意味がありません。希望の出力とともにいくつかのサンプルテーブルデータを表示します。 –

答えて

1

は何か試してみてください。私はあなたのデータベーススキーマを知らない原因私は本当にテストすることはできません

select created,c.sum_dollars 

    (select coalesce(sum(incoming), 0) - coalesce(sum(outgoing), 0) from transactions where currency = 'دالر') + 
    (select coalesce(sum(equal_to_dollar), 0) from transactions where incoming != 0) - 
    (select coalesce(sum(equal_to_dollar), 0) from transactions where outgoing != 0) as total_transaction, 

    (select coalesce(sum(incoming), 0) - coalesce(sum(outgoing), 0) from temporary_clients where currency = 'دالر') + 
    (select coalesce(sum(equal_to_dollar), 0) from temporary_clients where incoming != 0) - 
    (select coalesce(sum(equal_to_dollar), 0) from temporary_clients where outgoing != 0) as total_temp_client, 

    (select coalesce(sum(outgoing), 0) - coalesce(sum(incoming), 0) from money_transmission where currency = 'دالر') + 
    (select coalesce(sum(equal_to_dollar), 0) from money_transmission where outgoing != 0) - 
    (select coalesce(sum(equal_to_dollar), 0) from money_transmission where incoming != 0) as total_transmission, 

    (select coalesce(total_transaction + total_temp_client + total_transmission, 0)) as total, 

    (select capital - abs(coalesce(total_transaction + total_temp_client + total_transmission, 0))) as result 
    from capitals 
JOIN (select coalesce(sum(equal_to_dollar), 0) as sum_dollars, created from capitals group by created) c ON capitals.created = c.created 
group by created 

を。とにかくそれらの結果セットに参加する必要があります。

+0

ちょっとした変更がありましたら大変ありがとうございます – AliDK

関連する問題