让我们假设我的桌子看起来像这样:
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
列组合在一起,以便生成的表看起来像
+-------+-------------------+-------+-------+
| 1id | 1email | 2id | 2time |
+-------+-------------------+-------+-------+
| 79843 | email@example.com | 79843 | 120 |
| NULL | NULL | 79843 | 120 |
+-------+-------------------+-------+-------+
到目前为止我尝试过:
UPDATE `verify` set 2time = 2time where 2id like 1id;
但是,这不会影响任何行。
你有任何提示吗?
答案 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