2

我已经查看了 使用连接的 SQL 更新查询 ..但这并不是我所需要的(我习惯于编写 SQL,并且不知道如何修改答案)。

我有一个表“a”和一个表“b”。当且仅当“b”具有字段 f1、f2、f3 等于表“a”中的 f1、f2、f3 的记录时,我想更新“a”中的字段 f1。

所以,如果我有

TABLE a
f1            f2            f3         ...
------------------------------------------
m             a1a 1a1       1-1-1980
m             a1a 1a1       1-1-1980
m             b1b 1b1       18-1-1982
m             c1c 1c1       16-4-1975

TABLE b
f1            f2            f3         ...
------------------------------------------
m             b1b 1b1       18-1-1982
m             c1c 1c1       16-4-1975

做更新。然后表“a”看起来像:

TABLE a
f1            f2            f3         ...
------------------------------------------
m             a1a 1a1       1-1-1980
m             a1a 1a1       1-1-1980
m             b1b 1b1       *-1-1982
m             c1c 1c1       *-4-1975

我知道如何进行字符串操作......但更新查询不是我习惯的,尤其是在这种情况下。我会很感激你的帮助。

谢谢!

编辑:我正在使用 sqlite

编辑2:这是用户建议的查询,但目前无法更新记录(可能是我的错误):

UPDATE diseases
SET dateofbirth='*'||ltrim(dateofbirth,0123456789)
WHERE gender=(SELECT a1.gender FROM diseases AS a1 
              INNER JOIN stage2helper AS b ON     a1.gender = b.gender AND 
a1.dateofbirth = b.dateofbirth AND a1.postalcode = b.postalcode) 

AND postalcode=(SELECT a1.postalcode FROM diseases AS a1 INNER JOIN stage2helper AS b   ON a1.gender = b.gender AND a1.dateofbirth = b.dateofbirth AND a1.postalcode = b.postalcode) 

AND dateofbirth=(SELECT a1.dateofbirth FROM diseases AS a1 INNER JOIN stage2helper AS     b ON a1.gender = b.gender AND a1.dateofbirth = b.dateofbirth AND a1.postalcode =     b.postalcode);
4

1 回答 1

0

在 Transact-SQL 中,您可以这样做

UPDATE a
SET    a.f3=yourfunctiontogeneratetext()
FROM   b
WHERE  a.f1=b.f1 AND a.f2=b.f2 AND a.f3=b.f3

好的 ANSI SQL 你不能使用 from 语法所以试试

UPDATE a
SET    a.f3=yourfunctiontogeneratetext()
WHERE  a.f1 = (SELECT a1.f1
               FROM a as a1
                    iNNER JOIN
                    b ON  a.f1=b.f1 AND a.f2=b.f2 AND a.f3=b.f3) and
       a.f2 = (SELECT a1.f2
               FROM a as a1
                    iNNER JOIN
                    b ON  a.f1=b.f1 AND a.f2=b.f2 AND a.f3=b.f3) and
       a.f3 = (SELECT a1.f3
               FROM a as a1
                    iNNER JOIN
                    b ON  a.f1=b.f1 AND a.f2=b.f2 AND a.f3=b.f3)

我是在平板电脑上做的,所以请原谅任何错别字

于 2012-12-03T03:21:17.863 回答