1. ホーム
  2. mysql

[解決済み] Mysql: あるテーブルから別のテーブルにない行を選択する。

2022-04-27 08:07:45

質問

あるテーブルで、別のテーブルに表示されない行をすべて選択するにはどうすればよいですか?

表1:

+-----------+----------+------------+
| FirstName | LastName | BirthDate  |
+-----------+----------+------------+
| Tia       | Carrera  | 1975-09-18 |
| Nikki     | Taylor   | 1972-03-04 |
| Yamila    | Diaz     | 1972-03-04 |
+-----------+----------+------------+

表2:

+-----------+----------+------------+
| FirstName | LastName | BirthDate  |
+-----------+----------+------------+
| Tia       | Carrera  | 1975-09-18 |
| Nikki     | Taylor   | 1972-03-04 |
+-----------+----------+------------+

Table1 にある行が Table2 にない場合の出力例。

+-----------+----------+------------+
| FirstName | LastName | BirthDate  |
+-----------+----------+------------+
| Yamila    | Diaz     | 1972-03-04 |
+-----------+----------+------------+

たぶん、こんな感じでうまくいくはずです。

SELECT * FROM Table1 WHERE * NOT IN (SELECT * FROM Table2)

解決方法は?

別のコメントにあったように300カラムあり、すべてのカラムで比較したい場合(カラムはすべて同じ名前であると仮定しています)。 NATURAL LEFT JOIN を使用すると、2 つのテーブル間で一致するすべてのカラム名で暗黙のうちに結合されるので、結合条件をすべて手入力する必要がなくなります。

SELECT            a.*
FROM              tbl_1 a
NATURAL LEFT JOIN tbl_2 b
WHERE             b.FirstName IS NULL