SQL Server 2008 R2:複数のテーブルから重複する行を削除し、元の行を保持します

MAK

以下に示すように、5つの従業員テーブルがあります。

---Table: Emp_1
CREATE TABLE Emp_1 
(
    Emp_ID VARCHAR(10),
    Emp_FName VARCHAR(10),
    Emp_LName VARCHAR(10),
    Emp_PNumber VARCHAR(10)
);

---Table: Emp_2
CREATE TABLE Emp_2
(
    Emp_ID VARCHAR(10),
    Emp_FName VARCHAR(10),
    Emp_LName VARCHAR(10),
    Emp_PNumber VARCHAR(10)
);

---Table: Emp_3
CREATE TABLE Emp_3 
(
    Emp_ID VARCHAR(10),
    Emp_FName VARCHAR(10),
    Emp_LName VARCHAR(10),
    Emp_PNumber VARCHAR(10)
);

---Table: Emp_4
CREATE TABLE Emp_4 
(
    Emp_ID VARCHAR(10),
    Emp_FName VARCHAR(10),
    Emp_LName VARCHAR(10),
    Emp_PNumber VARCHAR(10)
);

---Table: Emp_5
CREATE TABLE Emp_5
(
    Emp_ID VARCHAR(10),
    Emp_FName VARCHAR(10),
    Emp_LName VARCHAR(10),
    Emp_PNumber VARCHAR(10)
);

--Insertion: Emp_1
INSERT INTO Emp_1 VALUES('A1','Abram','Mak','123');
INSERT INTO Emp_1 VALUES('A2','Sam','William','321');

--Insertion: Emp_2
INSERT INTO Emp_2 VALUES('A3','John','Marsh','456');
INSERT INTO Emp_2 VALUES('A4','Tom','Lee','654');

--Insertion: Emp_3
INSERT INTO Emp_3 VALUES('A5','Abram','Mak','789');
INSERT INTO Emp_3 VALUES('A6','Shawn','Meben','987');

--Insertion: Emp_4
INSERT INTO Emp_4 VALUES('A7','Sam','William','189');
INSERT INTO Emp_4 VALUES('A8','Mark','Boucher','287');

--Insertion: Emp_5
INSERT INTO Emp_5 VALUES('A9','Gery','Joy','907');
INSERT INTO Emp_5 VALUES('A10','Anthony','Desosa','977');

次に、各テーブル名をコンテナテーブルに挿入します。次のテーブルContainerがあり、テーブル名が含まれています。私の場合は、以下に示すように5を挿入したばかりです。

--Table : Container
CREATE TABLE Container
(
    TableName VARCHAR(50)
);

--Insertion
INSERT INTO Container VALUES('Emp_1');
INSERT INTO Container VALUES('Emp_2');
INSERT INTO Container VALUES('Emp_3'); 
INSERT INTO Container VALUES('Emp_4');
INSERT INTO Container VALUES('Emp_5');

:ここで、各テーブルから重複する行を削除し、元の行をそのままにしておきたいと思います。また、重複する行を削除するための条件は次のとおりです。

Emp_FNameおよびEmp_LNameが他のテーブルと一致する場合は、重複した行を削除し、元の行をそのまま維持する必要があります。

私の例ではEmp_FName削除する必要のあるテーブル繰り返されるand Emp_LName'Abram','Mak'と、テーブルEmp_3に存在する元のテーブルEmp_1はそのまま保持されます。

Emp_FNameEmp_LName'Sam','William'テーブルに繰り返しEmp_4テーブル内に存在する、削除する必要があり、オリジナルのものEmp_1をそのままキープしています。

単一テーブルの場合:単一テーブルの場合、次のスクリプトを使用して、重複するテーブルを削除し、元のテーブルを保持できます。

;WITH CTE AS
(
      SELECT  *,ROW_NUMBER() OVER (PARTITION BY Emp_FName,Emp_LName ORDER BY Emp_FName) Row_Number FROM Emp_1
)
DELETE FROM CTE
WHERE  Row_Number > 1;

私の質問は、動的な複数のテーブルから重複する行を削除する方法Containerです。つまり、私のテーブルでは、テーブルも5つ以上になる可能性があります。

ジュリアン・ヴァヴァスール

このクエリはそれを削除します(emp1> emp2 ...> emp5):

Declare @sql nvarchar(max) = ''

Select @sql = coalesce(@sql, '')+ '
Delete d From ['+c2.TableName+'] as d
    Inner join ['+c1.TableName+'] as c on c.Emp_FName = d.Emp_FName and c.Emp_LName = d.Emp_LName; 
    '
From Container as c1
Inner Join Container as c2 On c2.TableName > c1.TableName
Order By c1.TableName, c2.TableName

Print @sql
EXEC sp_executesql @sql

ただし、システムとデータモデルについて考え、動的クエリを使用せずにそれを行うためのより良い方法を見つけるように努める必要があると思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SQL Server2008-複数の行から文字を削除する

分類Dev

SQL Server 2008 R2:別のテーブルと一致するテーブル値を更新します

分類Dev

SQL Server 2008 R2:複数のCTEを使用して日付ごとのレコードを取得する

分類Dev

SQL Server 2008R2のすべての行で値が1つしかない複数の列を削除する方法

分類Dev

Microsoft SQL Server 2008 R2では、空のテーブルはどのくらいのスペースを使用しますか?

分類Dev

SQL Server 2008 R2:column2の値がcolumn1に存在する行を検索します

分類Dev

SQL Server 2008で行を列に変更する方法(複数のテーブル、結合など)

分類Dev

SQL Server2008複数のテーブルからトップレコードを取得する方法

分類Dev

ある列を別の列から減算して、SQL Server 2008R2の合計を実行します。

分類Dev

SQL Server 2008 R2の列で重複する値を見つける方法は?

分類Dev

SQL Serverの1:nテーブルから重複する個別の行を選択します

分類Dev

SQL Server 2008 R2:WHEREを使用せずに特定の行を表示する

分類Dev

SQL Server2008での重複の削除

分類Dev

SQL Server 2008 R2を使用したクエリでページングするために、dapperで複数のlike句を使用する

分類Dev

Microsoft SQL Server2008の列の個別のフィールドから上位2行を取得します

分類Dev

SQL Server 2008 R2を使用して特定の基準を指定して次の行から選択するSELECTクエリ?

分類Dev

SQL Server 2008テーブルの行を、別のテーブルの値と一致しないものとして保持する

分類Dev

SQL Server 2008で、同じ行の複数の結果行を1つの列でグループ化する

分類Dev

SQL Serverは2つのテーブルから複数の行のデータを取得します

分類Dev

SQL Server 2008 R2:列から最初にnull以外の値を取得する

分類Dev

テーブルから列値を取得し、SQL Server2008のスカラー変数に割り当てます。

分類Dev

SQL Server2008R2行から最大列を検索する

分類Dev

C#を使用して、SQL Server2008の複数のSQLクエリをASP.NET上のデータテーブルに結合します

分類Dev

SQL Server 2008 R2でこのループを回避する方法はありますか?

分類Dev

Microsoft SQL Server 2012テーブルから部分的に重複する行(2列のみの重複データ)を削除する

分類Dev

SQL Server 2008を使用して4つのテーブルからクエリデータを取得しますか?

分類Dev

SQL Server 2008 R2:グループのNULL値の1つのオカレンスを更新し、残りを削除します

分類Dev

Windowsサービス(C#)でマルチスレッドを使用してSQL Server 2008 R2に同じ挿入された複数のレコードを挿入および更新するにはどうすればよいですか?

分類Dev

SQL Server2008でのORDERBY

Related 関連記事

  1. 1

    SQL Server2008-複数の行から文字を削除する

  2. 2

    SQL Server 2008 R2:別のテーブルと一致するテーブル値を更新します

  3. 3

    SQL Server 2008 R2:複数のCTEを使用して日付ごとのレコードを取得する

  4. 4

    SQL Server 2008R2のすべての行で値が1つしかない複数の列を削除する方法

  5. 5

    Microsoft SQL Server 2008 R2では、空のテーブルはどのくらいのスペースを使用しますか?

  6. 6

    SQL Server 2008 R2:column2の値がcolumn1に存在する行を検索します

  7. 7

    SQL Server 2008で行を列に変更する方法(複数のテーブル、結合など)

  8. 8

    SQL Server2008複数のテーブルからトップレコードを取得する方法

  9. 9

    ある列を別の列から減算して、SQL Server 2008R2の合計を実行します。

  10. 10

    SQL Server 2008 R2の列で重複する値を見つける方法は?

  11. 11

    SQL Serverの1:nテーブルから重複する個別の行を選択します

  12. 12

    SQL Server 2008 R2:WHEREを使用せずに特定の行を表示する

  13. 13

    SQL Server2008での重複の削除

  14. 14

    SQL Server 2008 R2を使用したクエリでページングするために、dapperで複数のlike句を使用する

  15. 15

    Microsoft SQL Server2008の列の個別のフィールドから上位2行を取得します

  16. 16

    SQL Server 2008 R2を使用して特定の基準を指定して次の行から選択するSELECTクエリ?

  17. 17

    SQL Server 2008テーブルの行を、別のテーブルの値と一致しないものとして保持する

  18. 18

    SQL Server 2008で、同じ行の複数の結果行を1つの列でグループ化する

  19. 19

    SQL Serverは2つのテーブルから複数の行のデータを取得します

  20. 20

    SQL Server 2008 R2:列から最初にnull以外の値を取得する

  21. 21

    テーブルから列値を取得し、SQL Server2008のスカラー変数に割り当てます。

  22. 22

    SQL Server2008R2行から最大列を検索する

  23. 23

    C#を使用して、SQL Server2008の複数のSQLクエリをASP.NET上のデータテーブルに結合します

  24. 24

    SQL Server 2008 R2でこのループを回避する方法はありますか?

  25. 25

    Microsoft SQL Server 2012テーブルから部分的に重複する行(2列のみの重複データ)を削除する

  26. 26

    SQL Server 2008を使用して4つのテーブルからクエリデータを取得しますか?

  27. 27

    SQL Server 2008 R2:グループのNULL値の1つのオカレンスを更新し、残りを削除します

  28. 28

    Windowsサービス(C#)でマルチスレッドを使用してSQL Server 2008 R2に同じ挿入された複数のレコードを挿入および更新するにはどうすればよいですか?

  29. 29

    SQL Server2008でのORDERBY

ホットタグ

アーカイブ