UPDATE table1
SET variable1 = (SELECT variable1 FROM table2),
variable2 = (SELECT variable2 FROM table2)
WHERE table1.variable3 = table3.variable3;
基本上我正在编写一个查询来使用table2中的数据更新table1。但是where语句使用table1和table3。我想知道这是否会起作用,或者我必须在SELECT之后使用WHERE语句来创建一些约束。
答案 0 :(得分:4)
不,因为您没有明确保证您的嵌套子查询只返回一行
编辑:而且,根据@wildplasser对该问题的评论,它也会失败,因为table3未正确JOIN
(根本没有)
考虑这种变化......可能不符合您的目标,但功能,因为它只返回每个子查询中的一行:
UPDATE
table1
SET
variable1 = (SELECT TOP 1 variable1 FROM table2)
,variable2 = (SELECT TOP 1 variable2 FROM table2)
FROM
table1
JOIN
table3
ON table3.variable3 = table1.variable3
答案 1 :(得分:2)
不,但可以。
UPDATE table1
SET variable1 = (SELECT TOP 1 variable1 FROM table2),
variable2 = (SELECT TOP 1 variable2 FROM table2)
FROM table1
INNER JOIN table3 on table1.variable3 = table3.variable3
答案 2 :(得分:0)
不,这不起作用。 (大多数?)RDBMS将允许您进行JOINed UPDATE。这通常是解决这些问题的更好方法IMO:
UPDATE table1
SET variable1 = table2.variable1,
variable2 = table2.variable2
FROM table1
JOIN table3 ON
table1.variable3 = table3.variable3
--Presumably there's only 1 row in table2, with no JOIN criteria
CROSS JOIN table2;
UPDATE
table1
中所有行table3
table2
中的值{{1}}