質問: AテーブルとBテーブル 同じレイアウトのテーブルがあって、双方のテーブルにレコード(同一キーの) が存在した場合、Bテーブル側のレコードを出力したいです。Aテーブル側のレコードは出力したくありません。 BテーブルがAテーブルの後継になる運用を目指しています。 Aテーブルにしか(当該キーの)レコードが存在しない場合は Aテーブル側の内容を出力 Bテーブルにしか(当該キーの)レコードが存在しない場合は Bテーブル側の内容を出力 AB双方のテーブルに(当該キーの)レコードが存在する場合は Bテーブル側の内容を出力 こういったことを達成したいです。 システム移行でありがちな発行文ですが、お知恵を頂けませんでしょうか 当方のDBMSはMSですが、SQL文にそう大差ない認識ですので どのDBMSの例でも良いので例を示して頂ければ幸いです。ちなみに 以下2つのSELECT文をまとめて キーごと(USERID)のレコード出力を達成したいです。よろしくお願い致します。 ``` SELECT USERID, USERNAME, LEVEL FROM TABLE_A SELECT USERID, USERNAME, LEVEL FROM TABLE_B ```
回答: > > Aテーブルにしか(当該キーの)レコードが存在しない場合は Aテーブル側の内容を出力 > > Bテーブルにしか(当該キーの)レコードが存在しない場合は Bテーブル側の内容を出力 > > AB双方のテーブルに(当該キーの)レコードが存在する場合は Bテーブル側の内容を出力 > > > は * Bテーブルの内容を出力 * Bテーブルに含まれていないキーのAテーブルの内容を出力 と簡略化することができます。含まれる・含まれないは`IN`・`NOT IN`で表現できます。 ``` SELECT USERID, USERNAME, LEVEL FROM TABLE_B UNION ALL SELECT USERID, USERNAME, LEVEL FROM TABLE_A WHERE USERID NOT IN (SELECT USERID FROM TABLE_B) ```