Update row with select on same table

后端 未结 5 512
醉话见心
醉话见心 2021-01-11 12:13

I\'m trying to update row with same table query. Context:

ID        |  LANG       |  TEXT
----------------------------------
1         |  EN         |  Hello         


        
5条回答
  •  广开言路
    2021-01-11 12:27

    You don't specify the database. The following is standard 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;
    

    In the event of duplicates, the following should work:

    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;
    

    EDIT:

    Of course, not all databases support all ANSI standard functionality. In MySQL, you would use a join instead:

    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;
    

提交回复
热议问题