Mysql-从SELECT插入,条件是重复密钥更新
我正在阅读关于基于IF语句的复制密钥的条件更新的文章,例如 我正在尝试执行类似的操作,但在从select插入的过程中:Mysql-从SELECT插入,条件是重复密钥更新,mysql,Mysql,我正在阅读关于基于IF语句的复制密钥的条件更新的文章,例如 我正在尝试执行类似的操作,但在从select插入的过程中: INSERT IGNORE INTO data1 (id, date, quantity) SELECT id, date, quantity FROM other_table WHERE date = '2015-03-01' AND id=123 ON DUPLICATE KEY UPDATE quantity = IF(quantity IS NULL, VALUES(
INSERT IGNORE INTO data1 (id, date, quantity)
SELECT id, date, quantity
FROM other_table
WHERE date = '2015-03-01'
AND id=123
ON DUPLICATE KEY UPDATE
quantity = IF(quantity IS NULL, VALUES(quantity), quantity)
但是,这会产生一个错误:
#1052 - Column 'quantity' in field list is ambiguous
我不太明白如何告诉MySQL哪个“数量”字段是哪个,以解决歧义问题。向每个表添加别名似乎没有帮助(调用data1'd'会引发不同的错误)
有人有这方面的经验吗 mySQL不知道您指的是哪个数量,因为它同时存在于
data1
和其他表中
您必须这样使用它:other\u table.quantity
您的查询将这样更改
INSERT IGNORE INTO data1 (id, date, quantity)
SELECT id, date, quantity
FROM other_table
WHERE date = '2015-03-01'
AND id=123
ON DUPLICATE KEY UPDATE
data1.quantity = IF(other_table.quantity IS NULL,
VALUES(other_table.quantity), other_table.quantity)
您应该在查询的重复键更新部分的中限定对属于表data1
的数量
字段的引用:
INSERT INTO data1 (id, date, quantity)
SELECT id, date, quantity
FROM other_table
WHERE date = '2015-03-01'
AND id=123
ON DUPLICATE KEY UPDATE
quantity = IF(data1.quantity IS NULL, VALUES(quantity), data1.quantity)
编写此IF()
表达式的较短方法是使用函数或:
或
此外,不需要使用忽略。忽略
转换为警告的错误不再发生,因为重复键更新上的子句。在data1和其他表上使用表别名来消除歧义,并用表别名限定各自的列。我认为您应该使用其他表。Quantity感谢关于忽略
。这是有道理的,但我从未考虑过。我不知道你可以用这种方式消除列的歧义。谢谢你帮我省去了很多挫折,@axiac!
ON DUPLICATE KEY UPDATE
quantity = IFNULL(data1.quantity, VALUES(quantity))
ON DUPLICATE KEY UPDATE
quantity = COALESCE(data1.quantity, VALUES(quantity))