構建模式針對上述案例
CREATE TABLE #USER (USERID INT, NAME VARCHAR(20), LINKID INT)
INSERT INTO #USER
SELECT 1 AS USERID, 'abc' AS NAME, NULL AS LINKID
UNION ALL
SELECT 2 , 'pqr' , NULL
UNION ALL
SELECT 3 , 'str', NULL
UNION ALL
SELECT 4 , 'xyz', NULL
UNION ALL
SELECT 5 , 'jkl', NULL
UNION ALL
SELECT 6 , 'mno', NULL
CREATE TABLE #PhoneTable (USERID INT, PhoneNumber VARCHAR(20))
INSERT INTO #PhoneTable
SELECT 1 AS USERID, '123' PhoneNumber
UNION ALL
SELECT 2 AS USERID, '123'
UNION ALL
SELECT 3 AS USERID, '12345'
UNION ALL
SELECT 4 AS USERID, '34567'
UNION ALL
SELECT 5 AS USERID, '15233'
UNION ALL
SELECT 6 AS USERID, '15233'
CREATE TABLE #EmailTable (USERID INT, EmailID VARCHAR(50))
INSERT INTO #EmailTable
SELECT 1 AS USERID, '[email protected]' EmailID
UNION ALL
SELECT 2 AS USERID, '[email protected]'
UNION ALL
SELECT 3 AS USERID, '[email protected]'
UNION ALL
SELECT 4 AS USERID, '[email protected]'
現在單獨更新他們像
--updating with Checking #PhoneTable
;WITH CTE AS (
SELECT PhoneNumber
, ROW_NUMBER() OVER(ORDER BY (SELECT 1))+(SELECT ISNULL(MAX(LINKID),0) FROM #USER) LINKID
FROM #PhoneTable
GROUP BY PhoneNumber HAVING COUNT(DISTINCT USERID)>1
)
UPDATE U SET U.LINKID = C.LINKID FROM #USER U
INNER JOIN #PhoneTable P ON U.USERID = P.USERID
INNER JOIN CTE C ON P.PhoneNumber = C.PhoneNumber
--updating with Checking #EmailTable
;WITH CTE AS (
SELECT EmailID
, ROW_NUMBER() OVER(ORDER BY (SELECT 1))+(SELECT ISNULL(MAX(LINKID),0) FROM #USER) LINKID
FROM #EmailTable
GROUP BY EmailID HAVING COUNT(DISTINCT USERID)>1
)
UPDATE U SET U.LINKID = C.LINKID FROM #USER U
INNER JOIN #EmailTable E ON U.USERID = E.USERID
INNER JOIN CTE C ON E.EmailID = C.EmailID
對於獨特LINKID代我採取ISNULL(MAX(LINKID),0)
和adde d到ROW_NUMBER
@選項:查看已添加的標籤。 – Wanderer
可以用合併和輸出子句做到這一點? – atoms
但是LINKID 1來自哪裏? –