带连接的SQL更新?

Phi*_*l H 4 sql join sql-server-2005 sql-update

我有两张桌子.一个是简单的字符串/ ID查找:

StrTable:

str_key String
0       'a'
1       'b'

字符串是唯一的.另一个更复杂,包括共享的string_id

ValTable:

str_key other_key val
0        0        1.234
0        1        1.567
1        0        1.890

现在,我想对ValTable进行更新,使用我查找的字符串通过StrTable获取str_key.简单的更新将是:

UPDATE ValTable SET val = 2.124 WHERE str_key = 0 AND other_key = 1 LIMIT 1
IF @@ROWCOUNT=0 INSERT INTO ValTable VALUES (0,1,2.124);
Run Code Online (Sandbox Code Playgroud)

那么如何修改它以包括用一些字符串'a'查找str_key?我假设我需要加入,但我从未在更新中加入.或者我可以在where子句中添加更多内容吗?

Dav*_*d M 14

这是您需要的语法:

UPDATE  v
SET     val = 2.124
FROM    ValTable v
        INNER JOIN
                StringTable s
                ON v.str_key = s.str_key
WHERE   s.String = 'a'
AND     v.other_key = 1

IF @@ROWCOUNT = 0
BEGIN

        INSERT
        INTO    ValTable
        SELECT  str_key, 1, 2.124
        FROM    StringTable
        WHERE   String = 'a'

END
Run Code Online (Sandbox Code Playgroud)