簡體   English   中英

SQL Server更新聯接兩個表

[英]SQL Server Update Join Two Tables

我很難讓MSSQL配合我的意圖。

檢查以下內容...

重復項

UseId |   Use
-------------
2254  | Primary
2255  | Primary
2256  | Primary
2257  | Intersection
2258  | Monitor
2259  | Primary
2260  | Intersection
2261  | Primary
2264  | Monitor
2269  | Secondary

不重復

UseID |   Use
--------------
2252  | Intersection
2253  | Monitor
2251  | Primary
2262  | Secondary

多對多表

ID   | FKey | UseId
-------------------
1    |  1   | 2251
2    |  1   | 2252
3    |  2   | 2253
4    |  2   | 2262
5    |  3   | 2254
6    |  3   | 2257
7    |  3   | 2258
8    |  4   | 2255
9    |  4   | 2260
10   |  5   | 2259
11   |  5   | 2269

我想在“多對多”表上運行更新查詢,該查詢將與重復項和唯一性上的“使用”列匹配,然后用匹配的唯一UseId替換多對多表中的“重復” UseId。

產生的良好數據將如下所示。

好多對多表...

ID   | FKey | UseId
-------------------
1    |  1   | 2251
2    |  1   | 2252
3    |  2   | 2253
4    |  2   | 2262
5    |  3   | 2251
6    |  3   | 2252
7    |  3   | 2253
8    |  4   | 2251
9    |  4   | 2262
10   |  5   | 2251
11   |  5   | 2262

任何幫助表示贊賞


作為對發布的答案之一的回應...我遇到了一些困難。 它似乎不起作用。

更新命令正在更改“多對多”表中的記錄1-4(即使它們很好)...,而不更改任何其他記錄。

此腳本提供了問題的示例。

CREATE TABLE Uniques
(
    UseID INT,
    [Use] VARCHAR(50)
)

INSERT INTO Uniques (UseID, [Use]) VALUES (2254, 'Primary')
INSERT INTO Uniques (UseID, [Use]) VALUES (2255, 'Primary')
INSERT INTO Uniques (UseID, [Use]) VALUES (2256, 'Primary')
INSERT INTO Uniques (UseID, [Use]) VALUES (2257, 'Intersection')
INSERT INTO Uniques (UseID, [Use]) VALUES (2258, 'Monitor')
INSERT INTO Uniques (UseID, [Use]) VALUES (2259, 'Primary')
INSERT INTO Uniques (UseID, [Use]) VALUES (2260, 'Intersection')
INSERT INTO Uniques (UseID, [Use]) VALUES (2261, 'Primary')
INSERT INTO Uniques (UseID, [Use]) VALUES (2264, 'Monitor')
INSERT INTO Uniques (UseID, [Use]) VALUES (2269, 'Secondary')

CREATE TABLE Duplicates
(
    UseID INT,
    [Use] VARCHAR(50)
)

INSERT INTO Duplicates (UseID, [Use]) VALUES (2252, 'Intersection')
INSERT INTO Duplicates (UseID, [Use]) VALUES (2253, 'Monitor')
INSERT INTO Duplicates (UseID, [Use]) VALUES (2251, 'Primary')
INSERT INTO Duplicates (UseID, [Use]) VALUES (2262, 'Secondary')

CREATE TABLE ManyToMany
(
    Id INT,
    FKey INT,
    UseId INT
)

INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (1, 1, 2251)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (2, 1, 2252)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (3, 2, 2253)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (4, 2, 2262)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (5, 3, 2254)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (6, 3, 2257)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (7, 3, 2258)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (8, 4, 2255)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (9, 4, 2260)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (10, 5, 2259)
INSERT INTO ManyToMany (Id, FKey, UseId) VALUES (11, 5, 2269)

SELECT * FROM Uniques
SELECT * FROM Duplicates
SELECT * FROM ManyToMany

UPDATE  m
SET     m.UseId = u.UseId
FROM    ManyToMany m
        JOIN Duplicates d ON m.UseId = d.UseId
        JOIN Uniques u ON d.[Use] = u.[Use];

SELECT * FROM ManyToMany

DROP TABLE Uniques
DROP TABLE Duplicates
DROP TABLE ManyToMany
UPDATE  m
SET     m.UseId = u.UseId
FROM    ManyToMany m
        JOIN Duplicates d ON m.UseId = d.UseId
        JOIN Uniques u ON d.[Use] = u.[Use];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM