如何复制'url'值,如果它不是空的,为相同的'id',但另一个'lang'
<表类>
id
朗
url
tbody><<tr>1 1 cat-url 12 21 dog-url 22 表类>
对于用户定义的变量,您可以使用一种棘手的方法
或者如果你有MySQL 8使用可以使用窗口函数
CREATE TABLE tab1 ( `d` INTEGER, `lang` INTEGER, `url` VARCHAR(7) ); INSERT INTO tab1 (`d`, `lang`, `url`) VALUES ('1', '1', 'cat-url'), ('1', '2', NULL), ('1', '2', NULL), ('2', '1', 'dog-url'), ('2', '2',NULL);
UPDATE tab1 SET `url` = (@url := COALESCE(`url`, @url)) ORDER BY `d`;
SELECT * FROM tab1
d | lang | url-: |——:|:------1 | 1 | cat-url1 | 2 | cat-url1 | 2 | cat-url2 | 1 | dog-url2 | 2 | dog-url
CREATE TABLE tab2 ( `d` INTEGER, `lang` INTEGER, `url` VARCHAR(7) ); INSERT INTO tab2 (`d`, `lang`, `url`) VALUES ('1', '1', 'cat-url'), ('1', '2', NULL), ('1', '2', NULL), ('2', '1', 'dog-url'), ('2', '2',NULL);
UPDATE tab2 INNER JOIN (SELECT d, FIRST_VALUE(`url`) OVER(PARTITION BY `d` ORDER BY `lang`) as url FROM tab2) t1 SET tab2.`url` = t1.`url`
SELECT * FROM tab2
d | lang | url-: |——:|:------1 | 1 | cat-url1 | 2 | cat-url1 | 2 | cat-url2 | 1 | cat-url2 | 2 | cat-url
db<此处小提琴>此处小提琴>