通过连接多个表来更新多行

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;