如何在两个字段上使用 INNER JOIN 更新 SQLITE 列

Net*_*tor 8 sqlite java

如何将此查询转换为 SQLite:

UPDATE Table_1 
INNER JOIN Table_2 ON (Table_1.Field1 = Table_2.Field1) 
AND(Table_1.Field2 = Table_2.Field2)
SET Table_1.Field3 = Table_2.Field3
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的。

UPDATE Table_1 
SET Field3 = (SELECT Field3
            FROM Table2
            WHERE (Field1 = Table_2.Field1)
            AND (Field2 = Table_2.Field2))
WHERE Field1 IN (SELECT Table_2.Field1
            FROM Table2
            WHERE (Field1 = Table_2.Field1)
            AND (Field2 = Table_2.Field2)) 
AND Field2 IN (SELECT Table_2.Field2
            FROM Table2
            WHERE (Field1 = Table_2.Field1)
            AND (Field2 = Table_2.Field2)) 
Run Code Online (Sandbox Code Playgroud)

查询有效,但我得到错误的结果。

And*_*y M 12

为了同时在两列上实现连接,您可以使用 EXISTS 谓词:

UPDATE Table_1 
SET Field3 = (SELECT Field3
              FROM Table_2
              WHERE (Table_1.Field1 = Table_2.Field1)
                AND (Table_1.Field2 = Table_2.Field2))
WHERE EXISTS (SELECT *
              FROM Table_2
              WHERE (Table_1.Field1 = Table_2.Field1)
                AND (Table_1.Field2 = Table_2.Field2));
Run Code Online (Sandbox Code Playgroud)

如果您使用的是3.15.0或更高版本,您还可以利用行值比较

UPDATE Table_1 
SET Field3 =
    (SELECT Field3
     FROM Table_2
     WHERE (Table_1.Field1, Table_1.Field2) = (Table_2.Field1, Table_2.Field2))
WHERE (Field1, Field2) IN (SELECT Field1, Field2 FROM Table_2);
Run Code Online (Sandbox Code Playgroud)