154

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

表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 |
+-----------+----------+------------+

Table2にないTable1の行の出力例:

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

たぶん、このようなものが機能するはずです:

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

9 に答える 9

213

ではなく、列名に基づいて副選択を行う必要があります*

たとえば、id両方のテーブルに共通のフィールドがある場合は、次のように実行できます。

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

その他の例については、 MySQLサブクエリ構文を参照してください。

于 2012-08-01T21:12:02.887 に答える
116

別のコメントで述べたように300の列があり、すべての列を比較したい場合(列がすべて同じ名前であると仮定)、を使用しNATURAL LEFT JOINて、2つのテーブル間で一致するすべての列名を暗黙的に結合できます。すべての結合条件を手動で面倒に入力する必要はありません。

SELECT            a.*
FROM              tbl_1 a
NATURAL LEFT JOIN tbl_2 b
WHERE             b.FirstName IS NULL
于 2012-08-01T22:12:50.210 に答える
66
SELECT *
FROM Table1 AS a
WHERE NOT EXISTS (
  SELECT *
  FROM Table2 AS b 
  WHERE a.FirstName=b.FirstName AND a.LastName=b.Last_Name
)

EXISTS手伝います...

于 2012-08-01T21:07:23.650 に答える
39

標準のLEFTJOINで問題を解決でき、結合のフィールドにインデックスが付けられている場合は、
より高速になるはずです。

SELECT *
FROM Table1 as t1 LEFT JOIN Table2 as t2 
ON t1.FirstName = t2.FirstName AND t1.LastName=t2.LastName
WHERE t2.BirthDate Is Null
于 2012-08-01T21:21:11.957 に答える
11

この簡単なクエリを試してください。それは完璧に動作します。

select * from Table1 where (FirstName,LastName,BirthDate) not in (select * from Table2);
于 2017-10-30T16:58:56.320 に答える
8

試す:

SELECT * FROM table1
    LEFT OUTER JOIN table2
    ON table1.FirstName = table2.FirstName and table1.LastName=table2.LastName
    WHERE table2.BirthDate IS NULL
于 2014-12-08T11:58:43.270 に答える
0

オプションは

SELECT A.*
    FROM TableA as A
    LEFT JOIN TableB as B
    ON A.id = B.id
    Where B.id Is NULL
于 2021-11-24T13:46:33.123 に答える
-3

これはOracleで私のために働いた:

SELECT a.* 
    FROM tbl1 a 
MINUS 
SELECT b.* 
    FROM tbl2 b;
于 2017-02-07T12:16:19.907 に答える
-7
SELECT a.* FROM 
FROM tbl_1 a
MINUS
SELECT b.* FROM 
FROM tbl_2 b
于 2015-06-16T18:52:04.873 に答える