使用WHERE的SQL UPDATE SELECT

use*_*665 1 sql sql-server select where

我想UPDATE在表中的一列,但在每一行中,必须WHERE有另一行依赖于另一个值。

这是表格的样子。

BusinessUnitGUID | 类名| 默认GUID

    5        | PriceList | 349FDAFD34M
    5        | Footer1   | 987IOXG376L
    5        | Header1   | 12WQX954MIO
    7        | PriceList | NULL
    7        | Footer1   | NULL
    7        | Header1   | NULL
Run Code Online (Sandbox Code Playgroud)

结果应该是这样。

BusinessUnitGUID | 类名| 默认GUID

    5        | PriceList | 349FDAFD34M
    5        | Footer1   | 987IOXG376L
    5        | Header1   | 12WQX954MIO
    7        | PriceList | 349FDAFD34M
    7        | Footer1   | 987IOXG376L
    7        | Header1   | 12WQX954MIO
Run Code Online (Sandbox Code Playgroud)

但是此显示的查询不起作用,因为它返回许多行,因此并不精确。

update cSC_BusinessUnit
set defaultguid =
    (
    select defaultguid
    from cSC_BusinessUnit 
    where BusinessUnitGUID = 5
    )
where BusinessUnitGUID = 7
Run Code Online (Sandbox Code Playgroud)

wak*_*aka 6

您还需要对ClassName进行检查:

update b1
set b1.defaultguid =
    (
    select b2.defaultguid
    from cSC_BusinessUnit b2
    where b2.BusinessUnitGUID = 5
        AND b2.ClassName = b1.ClassName
    )
from cSC_BusinessUnit b1
where b1.BusinessUnitGUID = 7
Run Code Online (Sandbox Code Playgroud)


小智 5

也使用以下简短版本

UPDATE  b1
SET     b1.defaultguid = b2.defaultguid
FROM    cSC_BusinessUnit b1
        JOIN
        cSC_BusinessUnit b2
            ON b1.ClassName = b2.ClassName
                And b2.BusinessUnitGUID = 5
WHERE   b1.BusinessUnitGUID = 7
Run Code Online (Sandbox Code Playgroud)