Mysql - 合并具有匹配值的行

Mysql - combine rows with matching value

假设我的 table 看起来像这样:

CREATE TABLE `verify` (
`1id` varchar(111) DEFAULT NULL,
`1email` varchar(111) DEFAULT NULL,
`2id` varchar(111) DEFAULT NULL,
`2time` varchar(111) DEFAULT NULL
);

INSERT INTO `verify` (`1id`, `1email`) VALUES ('79843', 'email@example.com');
INSERT INTO `verify` (`2id`, `2time`) VALUES ('79843', '120');

看起来像这样:

+-------+-------------------+-------+-------+
| 1id   | 1email            | 2id   | 2time |
+-------+-------------------+-------+-------+
| 79843 | email@example.com | NULL  | NULL  |
| NULL  | NULL              | 79843 | 120   |
+-------+-------------------+-------+-------+

而且我想以某种方式将行与匹配的 1id2id 列组合起来,以便生成的 table 看起来像

+-------+-------------------+-------+-------+
| 1id   | 1email            | 2id   | 2time |
+-------+-------------------+-------+-------+
| 79843 | email@example.com | 79843 | 120   |
| NULL  | NULL              | 79843 | 120   |
+-------+-------------------+-------+-------+

到目前为止我尝试过的:

UPDATE `verify` set 2time = 2time where 2id like 1id;

但是,这不会影响任何行。

你有什么建议吗?

您的查询只是比较和分配 table 的同一行中的列,而不是跨不同行进行比较。没有行 2id like 1id 为真,所以它不会改变任何东西;即使这样做了,set 2time = 2time 也不会做任何事情,因为它只是将一列复制到自身。

您需要将 table 与其自身连接,以便关联不同的行。

UPDATE verify AS v1
JOIN verify AS v2 ON v1.1id = v2.2id
SET v1.2time = v2.2time, v1.2id = v2.2id

DEMO