使用同一表上的选择更新行
发布于 2021-03-27 16:45:28
我正在尝试使用相同的表查询更新行。语境:
ID | LANG | TEXT
----------------------------------
1 | EN | Hello
1 | FR |
1 | ES |
2 | EN | Boat
2 | FR | Bateau
2 | ES |
我想:对于每一行;如果 TEXT为NULL ; 使用具有相同ID且LANG =’EN’的行的TEXT值更新它。
做这样的事情的SQL请求是什么?
关注者
0
被浏览
98
1 个回答
-
您没有指定数据库。以下是标准SQL:
UPDATE t SET TEXT = (SELECT text FROM t t2 WHERE t.id = t2.id AND LANG ='EN' AND TEXT IS NOT NULL ) WHERE TEXT IS NULL;
如果出现重复,则应执行以下操作:
UPDATE t SET TEXT = (SELECT max(text) FROM t t2 WHERE t.id = t2.id AND LANG ='EN' AND TEXT IS NOT NULL ) WHERE TEXT IS NULL;
编辑:
当然,并非所有数据库都支持所有ANSI标准功能。在MySQL中,您可以
join
改用:UPDATE t JOIN (SELECT id, max(text) as text_en FROM t t2 WHERE LANG ='EN' AND TEXT IS NOT NULL ) ten ON t.id = ten.id SET t.TEXT = ten.text_en WHERE t.TEXT IS NULL;