Mysql - 将行与匹配值组合在一起

时间:2017-05-09 20:44:34

标签: mysql mariadb

让我们假设我的桌子看起来像这样:

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列组合在一起,以便生成的表看起来像

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

到目前为止我尝试过:

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

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

你有任何提示吗?

1 个答案:

答案 0 :(得分:2)

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

您需要将表连接到自身,以便您可以关联不同的行。

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

the rbenv documentation