1

SQL Server で 2 つのデータベース テーブルを比較し、最初のテーブルにない 2 番目のテーブルの行を返す方法を教えてください。両方のテーブルの主キーが同じではありません。たとえば、テーブルは次のとおりです。

表1

ID             Name               DoB
1              John Doe           20/03/2012
2              Joe Bloggs         31/12/2011

表2

ID             Name                DoB
11             John Doe            20/03/2012
21             Joe Bloggs          31/12/2011
31             James Anderson      14/04/2010

SQL クエリは、両方のテーブルの名前と DoB のみを比較し、31 James Anderson 14/04/2010 を返す必要があります。

ありがとう。

4

5 に答える 5

5

非常に単純です。LEFT OUTER JOIN を使用して、Table1 に一致がない場合でも Table2 からすべてを返し、一致しない行のみに制限します

SELECT Table2.ID, Table2.Name, Table2.DoB
FROM Table2
LEFT OUTER JOIN Table1 ON Table2.Name = Table1.Name AND Table2.DoB = Table1.DoB
WHERE Table1.ID IS NULL
于 2012-08-03T09:43:02.687 に答える
1

SQL Server で CHECKSUM () 関数を使用する

select T1.* from Table1 T1 join Table2 T2
on CHECKSUM(T1.Name,T1.DOB)!= CHECKSUM(T2.Name,T2.DOB)

詳細

于 2012-08-03T09:42:54.147 に答える
1

SQL EXCEPTの使用を調べる

SELECT Name, DOB
FROM Table1
EXCEPT
SELECT Name, DOB
FROM Table2

http://msdn.microsoft.com/en-us/library/ms188055.aspx

于 2012-08-03T09:43:01.903 に答える
1

LEFT OUTER JOIN が必要です。http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join

このタイプの JOIN は、結合されたテーブルに一致するレコードがない場合でも、「左」のテーブル (この例では FROM 句のテーブル) のすべてのレコードを返します。

SELECT Table2.ID, Table2.Name, Table2.DoB
FROM Table2
LEFT OUTER JOIN Table1 ON Table1.Name = Table2.Name AND Table1.DoB = Table2.DoB
WHERE Table1.ID IS NULL

LEFT JOIN を LEFT OUTER JOIN に置き換えることができることに注意してください。これは、ほとんどの DBMS が使用するショートカットです。

于 2012-08-03T09:45:35.397 に答える