mysql insert select on duplicate key显示某个字段is ambiguous

图片描述

这个表的name和type字段是联合唯一索引,我想实现把type=1的数据重新insert到这个表变为type=0,当冲突时更新aa = CONCAT(aa,VALUES(aa)),但是报错Column 'aa' in field list is ambiguous,我加了b.aa也还是这样,求大佬指点, 谢谢。
sql:

INSERT INTO b(`name`,`aa`,`type`)
SELECT `name`, aa, 0
FROM b 
WHERE `type`=1
ON DUPLICATE KEY UPDATE `aa` = CONCAT(`aa`,VALUES(`aa`))
// 表结构和数据如下
CREATE TABLE `b` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(66) COLLATE utf8_general_mysql500_ci NOT NULL DEFAULT '' COMMENT 'english remark',
  `aa` varchar(33) COLLATE utf8_general_mysql500_ci NOT NULL,
  `type` tinyint(1) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `NewIndex1` (`name`,`type`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_general_mysql500_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

insert  into `b`(`id`,`name`,`aa`,`type`) values (4,'a','{2017,01,01}',0),(5,'a','{2017,02,01}',1),(7,'b','{2017,01,11}',0),(8,'b','{2017,01,01}',1),(16,'c','{2017,01,01}3',1);
阅读 3.7k
1 个回答
INSERT INTO b(`name`,`aa`,`type`)
SELECT `name`, `aa`, 0
FROM b AS c
WHERE `type`=1
ON DUPLICATE KEY UPDATE b.aa = CONCAT(b.aa,c.aa)

这个意思?

+----+------+--------------------------+------+
| id | name | aa                       | type |
+----+------+--------------------------+------+
| 4  | a    | {2017,01,01}{2017,02,01} | 0    |
| 5  | a    | {2017,02,01}             | 1    |
| 7  | b    | {2017,01,11}{2017,01,01} | 0    |
| 8  | b    | {2017,01,01}             | 1    |
| 16 | c    | {2017,01,01}3            | 1    |
| 17 | c    | {2017,01,01}3            | 0    |
+----+------+--------------------------+------+
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题