teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

\(追記\)追加

2017/07/13 01:24

投稿

kurokoba
kurokoba

スコア276

answer CHANGED
@@ -21,4 +21,15 @@
21
21
  FROM (SELECT 名前,番号 FROM table1 UNION SELECT 名前,番号 FROM table2) x
22
22
  LEFT join table2 t2 ON x.名前=t2.名前 AND x.番号=t2.番号
23
23
  ```
24
- 一応完成。
24
+ 一応完成。
25
+ (追記)
26
+ 一応完成なんですが、性能とかの問題になるとまた別です。たとえば
27
+
28
+ ```SQL
29
+ //SQL3
30
+ SELECT t1.名前,t1.番号,t2.縦,t2.横 FROM table1 t1 LEFT JOIN table2 t2 ON t1.名前=t2.名前 AND t1.番号=t2.番号
31
+ UNION
32
+ SELECT 名前,番号,縦,横 FROM table2
33
+ ```
34
+ こっちの方が大概の場合効率的でしょう。いずれもUNIONが重複をマージするという仕様を利用してますが、SQL2はキーの重複を除いてからキーでない情報を付加しているのに対し、SQL3は重複ありで抽出してから重複を除去してます。
35
+ ※性能云々はおいておいてSQL2の方が論理的にはわかりやすいと思うのは個人的な感想。