2013-03-02 73 views
1

我想创建一个查询,将在同一时间添加/更新多行,我试图确保它通过更新除私钥以外的所有值正确处理重复键,在我的情况下是a.id重复多次更新

INSERT INTO products a (a.id, a.price, a.condition, a.link, a.price_updated) 
VALUES ('t1', 11, 'used', 'adasd', 100), ('t2', 11, 'used', 'adasd', 100) 
ON DUPLICATE KEY UPDATE VALUES (a.price, a.condition, a.link, a.price_updated) 

上述查询给我靠近a (a.id一个正确的语法错误,有什么事情我做错了?

任何想法?

回答

2

我认为这是你在找什么:

INSERT INTO products (id, price, cond, link, price_updated) 
VALUES ('t1', 11, 'used', 'adasd', 100), 
    ('t1', 11, 'used', 'adasd', 2100) 
ON DUPLICATE KEY UPDATE 
    price = VALUES(price), 
    cond = VALUES(cond), 
    link = VALUES(link), 
    price_updated = VALUES(price_updated) 

SQL Fiddle Demo

我不认为你可以使用此表的别名要么,但我可能是错误的。

顺便说一句 - 我使用条件域的cond只是为了让它更容易 - 用你的域名替换(你可能需要返回条件,因为我相信它是一个保留字)。

+0

你的正确的条件是一个保留字,这看起来不错,谢谢 – 2013-03-03 00:01:06

+1

@ mk_89 - np,很高兴我们可以帮助! – sgeddes 2013-03-03 00:01:40

1

由于Mysql的INSERT语句不允许您别名插入的表,因此会出现语法错误:您必须说INSERT INTO products (id, ...)

+0

啊我明白 – 2013-03-02 23:53:55

+1

@ mk_89 - 这不是查询的唯一问题。您还需要修复您的UPDATE语法。看到我的帖子上面。 – sgeddes 2013-03-02 23:57:06

+1

确实(我只是在解释错误的来源)。 – alexis 2013-03-02 23:59:33