SQL Update使用其他查询结果

时间:2012-12-03 02:19:02

标签: sql sql-update

我看过了 SQL update query using joins ..但它不是我需要的(我习惯于烹饪SQL,并且无法弄清楚如何修改答案)。

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

所以,如果我有

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);

1 个答案:

答案 0 :(得分: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)

我在平板电脑上这样做,请原谅任何错别字