我希望有人可以帮助我。我研究了一下,但无法找到我想要的确切答案。
我有两张桌子:
Table1
======
Col1 | Col2 | Col3 | Col4 | Col5 | Col6
Table2
======
Col1 | Col2 | Col3 | Col4 | Col5 | Col6
表1中的Col5和Col6为空,但在表2的某些条目中具有值。 两个表在所有其他列中具有相同的条目,但它们的排序方式不同。
每个表格中前4列的组合是唯一的。 我想将Table2.Col5中的值复制到Table1.Col5,其中其他4列的唯一组合在两个表之间匹配。
我正尝试在excel中执行类似于VLOOKUP的操作,只搜索4列的匹配组合,以检索其他2列的值并更新相关条目。
我确实在这里找到了类似于SQL Server的东西:How do I UPDATE from a SELECT in SQL Server?但不是我需要的东西,特别是因为两个表中的行具有相同的顺序。
非常感谢任何帮助。
答案 0 :(得分:0)
我假设你有一个像这样的表结构:
CREATE TABLE Table1 (
Col1 INT NOT NULL,
Col2 INT NOT NULL,
Col3 INT NOT NULL,
Col4 INT NOT NULL,
Col5 INT NOT NULL,
Col6 INT NOT NULL,
PRIMARY KEY (Col1, Col2, Col3, Col4)
);
CREATE TABLE Table2 (
Col1 INT NOT NULL,
Col2 INT NOT NULL,
Col3 INT NOT NULL,
Col4 INT NOT NULL,
Col5 INT NOT NULL,
Col6 INT NOT NULL,
PRIMARY KEY (Col1, Col2, Col3, Col4)
);
你有这样的样本数据:
INSERT INTO Table1 (
Col1, Col2, Col3, Col4, Col5, Col6
)
VALUES
(1, 1, 1, 1, 25, 7),
(2, 2, 2, 2, 8, 9),
(3, 3, 3, 3, 25, 12);
INSERT INTO Table2 (
Col1, Col2, Col3, Col4, Col5, Col6
)
VALUES
(1, 1, 1, 1, 26, 8),
(2, 2, 2, 2, 9, 10),
(4, 4, 4, 4, 30, 3);
您可以使用ANSI update syntax解决问题。 ANSI解决方案如下所示:
UPDATE Table1
SET
Col5 = (
SELECT Col5
FROM Table2
WHERE
Table1.Col1 = Table2.Col1 AND
Table1.Col2 = Table2.Col2 AND
Table1.Col3 = Table2.Col3 AND
Table1.Col4 = Table2.Col4
),
Col6 = (
SELECT Col6
FROM Table2
WHERE
Table1.Col1 = Table2.Col1 AND
Table1.Col2 = Table2.Col2 AND
Table1.Col3 = Table2.Col3 AND
Table1.Col4 = Table2.Col4
)
WHERE EXISTS (
SELECT *
FROM Table2
WHERE
Table1.Col1 = Table2.Col1 AND
Table1.Col2 = Table2.Col2 AND
Table1.Col3 = Table2.Col3 AND
Table1.Col4 = Table2.Col4
);
最后,Table1中的数据如下所示:
Col1 Col2 Col3 Col4 Col5 Col6
1 1 1 1 26 8
2 2 2 2 9 10
3 3 3 3 25 12
第1行和第2行已更新,因为Table2中有相应的行。第3行保持不变,因为表2中没有相应的行。
有关工作示例,请参阅我的SQLFiddle。我在SQLFiddle上使用了SQLLite的SQL.js实现。
坦率地说,ANSI更新语法很糟糕。它非常糟糕,每个商业数据库引擎都有自己的扩展语法,可以更轻松地进行复杂的更新。
我不知道SQLite是否有自己的扩展语法或采用了另一种数据库引擎。
您提到过您尝试过SQL Server解决方案。
使用SQL Server语法,解决方案如下所示:
UPDATE Table1
SET
Col5 = Table2.Col5,
Col6 = Table2.Col6
FROM Table1
INNER JOIN Table2 ON
Table1.Col1 = Table2.Col1 AND
Table1.Col2 = Table2.Col2 AND
Table1.Col3 = Table2.Col3 AND
Table1.Col4 = Table2.Col4;
不幸的是,SQLite不理解它:
SQLite exception: 1, near "FROM": syntax error
该解决方案可能仅适用于SQL Server。链接问题的currently accepted answer显示了解决SQL Server,Oracle,MySQL和ANSI问题的不同方法。