SQL Update子查询返回没有结果运行不同的子查询

时间:2013-05-09 14:40:39

标签: sql sql-server subquery

我正在尝试进行更新,但我遇到了问题(使用microsoft sql server)

update mytable
   set myvalue=
   (
       (select myvalue from someothertable
        where someothertable.id=mytable.id)
   )
   from table mytable
   where mytable.custname='test'

基本上,如果发生这种情况,子查询可能不会返回任何结果我想调用不同的子查询:

(select myvalue from oldtable
where oldtable.id=mytable.id)

2 个答案:

答案 0 :(得分:0)

好吧,你可以先运行第二个查询,然后再运行第一个查询。 这样,只有当第一个查询可以带来它们时才会覆盖这些值,并且当(原始)第一个查询不会带来任何结果时,它们将具有第一个查询的结果。

另外,我认为你的第二个查询中有一个输入错误的表名。

update mytable
   set myvalue=
   (
       select myvalue from oldtable
        where oldtable.id=mytable.id
   )
   from table mytable
   where mytable.custname='test'
   and exists (select 1 from oldtable
        where oldtable.id=mytable.id)


update mytable
   set myvalue=
   (
       select myvalue from someothertable
        where someothertable.id=mytable.id
   )
   from table mytable
   where mytable.custname='test'
   and exists ( select 1 from someothertable
        where someothertable.id=mytable.id)

编辑:你需要添加exists子句,因为如果没有,它会用null值更新,我想

答案 1 :(得分:0)

您可以简单地加入两个表格,

UPDATE  a
SET     a.myValue = b.myValue
FROM    myTable a
        INNER JOIN someOtherTable b
            ON a.ID = b.ID
WHERE   a.CustName = 'test'