SQL:UNIONで結果を統合するときに忘れてはいけないこと
UNION使った上に、SUMで合計を求めたときに起きたことです。
最初は気がつかないで、はまってました。
UNIONを使って、2つのテーブルから結果を統合して、SUMで合計を求めて表示したら、SUMを使わないでプログラムで合計した値と、結果が一致しませんでした。
SELECT SUM(amount) FROM ( SELECT amount FROM table1 UNION SELECT amount FROM table2 ) AS LIST
UNIONしないで、SQLを個別に動作させて、結果を確認すると、SUMを使わないでプログラムで合計した値と、結果が一致します。
原因を考えていて気づいたのは、UNIONを使うと値が同じ場合は、除外されているのではないかということでした。
値をチェックすると、同じ値が3個あり、3個の合計値が、結果の差分と一致しました。
値が必ず違う列があればいいので、以下のようにしたら結果が一致しました。
SELECT SUM(amount) FROM ( SELECT id, amount FROM table1 UNION SELECT id, amount FROM table2 ) AS LIST
今回は、求め方が違う方法でも合計を求めていたので気づきましたが、求めていなかったら気づいていませんでした。
UNIONの結果はよく見ておかないと、予想外の結果になります。