SQL

使用同一表上的选择更新行

发布于 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 个回答
  • 面试哥
    面试哥 2021-03-27
    为面试而生,有面试问题,就找面试哥。

    您没有指定数据库。以下是标准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;
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看