[英]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.