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

4

3 回答 3

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
于 2012-04-30T18:29:52.450 回答
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
于 2012-04-30T18:30:13.777 回答
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

于 2012-04-30T18:34:33.810 回答