我看过了 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);
答案 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)
我在平板电脑上这样做,请原谅任何错别字