这个UPDATE语句会起作用吗?

时间:2012-04-30 18:27:07

标签: sql sql-update

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语句来创建一些约束。

3 个答案:

答案 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}}