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 |
+-------+-------------------+-------+-------+
而且我想以某种方式将行与匹配的 1id
和 2id
列组合起来,以便生成的 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
假设我的 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 |
+-------+-------------------+-------+-------+
而且我想以某种方式将行与匹配的 1id
和 2id
列组合起来,以便生成的 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