5

SQL Server データベースに 2 つのテーブルがあり、両方のテーブルに同じスキーマがあるとします。両方のテーブルの 1 つの列を比較し、table1 では欠落しているが table2 にある値を見つけたいと考えています。各クエリで個別のリストを取得した後、マクロを使用して Excel で手動でこれを行ってきましたが、クエリがあれば作業は少なくなります。T-SQL を使用して不足しているレコードを見つけるにはどうすればよいですか? 次のデータ型に対してこれを行いたいと思います: datetime, nvarchar & bigint.

SELECT DISTINCT [dbo].[table1].[column1]
FROM [dbo].[table1]
ORDER BY [dbo].[table1].[column1] DESC

SELECT DISTINCT [dbo].[table2].[column1]
FROM [dbo].[table2]
ORDER BY [dbo].[table2].[column1] DESC
4

4 に答える 4

13

これを行うにはいくつかの方法があります...

LEFT JOIN:

SELECT DISTINCT t2.column1
FROM dbo.table2 t2
LEFT JOIN dbo.table1 t1
  ON t2.Column1 = t1.Column1
WHERE t1.Column1 IS NULL

NOT EXISTS:

SELECT DISTINCT t2.column1
FROM dbo.table2 t2
WHERE NOT EXISTS (
  SELECT 1
  FROM dbo.table1 t1
  WHERE t1.column1 = t2.column1
)

NOT IN:

SELECT DISTINCT t2.column1
FROM dbo.table2 t2
WHERE t2.column1 NOT IN (
  SELECT t1.column1
  FROM dbo.table1 t1
)

これらのアプローチの動作と効率には若干の違いがあります...主にNULL列の値の存在に基づいているため、各アプローチを試して、期待する結果が得られる最も効率的なアプローチを見つけてください。

于 2013-03-22T15:37:32.330 に答える
3
SELECT DISTINCT [dbo].[table2].[column1]
FROM [dbo].[table2]
except
SELECT DISTINCT [dbo].[table1].[column1]
FROM [dbo].[table1]

Table1 の column1 に存在しない、Table2 の column1 のすべての値

于 2013-03-22T15:38:48.520 に答える
1

基本的にはご利用いただけますLEFT JOIN

TableBこの場合、メインテーブルとして設定されます。TableAを使用して結合するとLEFT JOIN、一致しないレコードがTableA結果リストに残りますが、それらの値はNULLになります。したがって、一致しないレコードを除外するには、tableAでNULL値を持つレコードのみを選択するフィルター条件を追加します。

SELECT  b.*
FROM    tableB b
        LEFT JOIN tableA a
            ON a.column1 = b.column1
WHERE   a.column1 IS NULL

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-03-22T15:36:50.283 に答える
0

SQL Server 2005あなたが使用できる以降Except

SELECT DISTINCT [dbo].[table2].[column1]
FROM [dbo].[table2]
Except
SELECT DISTINCT [dbo].[table1].[column1]
FROM [dbo].[table1]
于 2013-03-22T15:39:50.027 に答える