通过连接多个表来更新多行
Update multiple rows by joining many tables
我有 3 个表,我正在尝试找到一种使用其他表数据更新多行的方法。
通过检查表 1 中的 id 是否链接到表 3 中的 idTab1 以及表 2 中的 id 是否链接到表 3 中的 idTab2
enter code here
Table1
id, info
--------
1, null
2, info2
3, null
Table2
id, data
---------
1, info1
2, info2
3, info4
Table3
idTab1, idTab2
------
1, 1
2, 2
3, 3
期望的结果是:
Table1
id, info
--------
1, info1
2, info2
3, info3
提前致谢。
您可以使用以下语法在 UPDATE 语句中连接 3 个表:
UPDATE Table1
SET Table1.info = t2.data
FROM Table3 t3 INNER JOIN Table2 t2
ON t2.id = t3.idTab2
WHERE t3.idTab1 = Table1.id AND Table1.info IS NULL
参见demo。
结果:
> ID | INFO
> -: | ----:
> 1 | info1
> 2 | info2
> 3 | info4
CREATE TABLE TABLE1
(
ID TINYINT NOT NULL,
INFO VARCHAR(100)
)
INSERT TABLE1(ID,INFO)
SELECT 1,NULL
UNION ALL
SELECT 2,'INFO2'
UNION ALL
SELECT 3,NULL
CREATE TABLE TABLE2
(
ID TINYINT NOT NULL,
DATA VARCHAR(100)NOT NULL
)
INSERT TABLE2(ID,DATA)
SELECT 1,'INFO1'
UNION ALL
SELECT 2,'INFO2'
UNION ALL
SELECT 3,'INFO4'
CREATE TABLE TABLE3
(
idTab1 TINYINT,
idTab2 TINYINT
)
INSERT TABLE3(idTab1,idTab2)
SELECT 1,1
UNION ALL
SELECT 2,2
UNION ALL
SELECT 3,3
MERGE INTO TABLE1 AS DEST
USING
(
SELECT T1.ID,T2.DATA
FROM TABLE1 AS T1
JOIN TABLE3 AS T3 ON T1.ID=T3.idTab1
JOIN TABLE2 AS T2 ON T3.idTab2=T2.ID
)AS SRC ON DEST.ID=SRC.ID
WHEN MATCHED AND (DEST.INFO IS NULL OR DEST.INFO='')THEN UPDATE SET
DEST.INFO=SRC.DATA;
SELECT *FROM TABLE1;
--DROP TABLE TABLE1;
--DROP TABLE TABLE2;
--DROP TABLE TABLE3;
我有 3 个表,我正在尝试找到一种使用其他表数据更新多行的方法。 通过检查表 1 中的 id 是否链接到表 3 中的 idTab1 以及表 2 中的 id 是否链接到表 3 中的 idTab2
enter code here
Table1
id, info
--------
1, null
2, info2
3, null
Table2
id, data
---------
1, info1
2, info2
3, info4
Table3
idTab1, idTab2
------
1, 1
2, 2
3, 3
期望的结果是:
Table1
id, info
--------
1, info1
2, info2
3, info3
提前致谢。
您可以使用以下语法在 UPDATE 语句中连接 3 个表:
UPDATE Table1
SET Table1.info = t2.data
FROM Table3 t3 INNER JOIN Table2 t2
ON t2.id = t3.idTab2
WHERE t3.idTab1 = Table1.id AND Table1.info IS NULL
参见demo。
结果:
> ID | INFO
> -: | ----:
> 1 | info1
> 2 | info2
> 3 | info4
CREATE TABLE TABLE1
(
ID TINYINT NOT NULL,
INFO VARCHAR(100)
)
INSERT TABLE1(ID,INFO)
SELECT 1,NULL
UNION ALL
SELECT 2,'INFO2'
UNION ALL
SELECT 3,NULL
CREATE TABLE TABLE2
(
ID TINYINT NOT NULL,
DATA VARCHAR(100)NOT NULL
)
INSERT TABLE2(ID,DATA)
SELECT 1,'INFO1'
UNION ALL
SELECT 2,'INFO2'
UNION ALL
SELECT 3,'INFO4'
CREATE TABLE TABLE3
(
idTab1 TINYINT,
idTab2 TINYINT
)
INSERT TABLE3(idTab1,idTab2)
SELECT 1,1
UNION ALL
SELECT 2,2
UNION ALL
SELECT 3,3
MERGE INTO TABLE1 AS DEST
USING
(
SELECT T1.ID,T2.DATA
FROM TABLE1 AS T1
JOIN TABLE3 AS T3 ON T1.ID=T3.idTab1
JOIN TABLE2 AS T2 ON T3.idTab2=T2.ID
)AS SRC ON DEST.ID=SRC.ID
WHEN MATCHED AND (DEST.INFO IS NULL OR DEST.INFO='')THEN UPDATE SET
DEST.INFO=SRC.DATA;
SELECT *FROM TABLE1;
--DROP TABLE TABLE1;
--DROP TABLE TABLE2;
--DROP TABLE TABLE3;