我正在尝试使用相同的表查询更新行。语境:
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请求是什么?
您没有指定数据库。以下是标准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改用:
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;