我需要从另一个表中插入几条记录,如果有一个重复的键,则从同一个表中更新当前记录。
我在这个网站上找到了几个有用的答案,但似乎没有一个对我有用。所有返回一个语法错误,我不确定是否仅仅是我使用的接口不支持这些命令什么的。插入没有重复键的地方,此查询工作正常。如果有任何方法,任何人都可以使用什么样的语法来正确地执行这些命令,我将非常感激!
以下是那些似乎完全满足了我的需求,但却没有奏效的人。
REPLACE INTO
INSERT ... ON DUPLICATE KEY UPDATE
INSERT OR REPLACE INTO下面是我的INSERT查询当前的示例:
USE database
GO
INSERT INTO products
(upc, name, price)
select upc = TempTables.dbo.new_items.upc,
name = TempTables.dbo.new_items.name,
price = TempTables.dbo.new_items.price
FROM TempTables.dbo.new_items发布于 2014-03-19 17:06:42
我个人喜欢MERGE的声明
create table ##new_items (upc int, name int, price int)
create table ##products
(upc int, name int, price int)
merge into ##products [tgt]
using ##new_items [src]
on [tgt].upc = [src].upc and [tgt].name = [src].name
when matched then update set price = [src].price
when not matched then insert (upc, name, price)
values ([src].upc, [src].name, [src].price)
;要查看您已经使用过的项,您可以这样查询
-- the items in new_items that aren't in products
select n.* from new_items n left outer join products p
on n.upc = p.upc where p.upc is null
-- the items in new_items that are in products
select n.* from new_items n left outer join products p
on n.upc = p.upc where p.upc is not null当然,运行update / insert / merge之后,您将不知道哪些项已经存在,哪些项已经插入。如果您想知道您需要在表中添加一个“更新日期”列并在那个时候标记它。
发布于 2014-03-19 15:37:12
我需要做的是从另一个表中插入几条记录,在其中有一个重复的键,而不是从同一个表中更新当前记录。
这通常分两个步骤完成(一些SQL服务器有一个语法可以在一步内完成,但更通用的方法是两个步骤)
(assuming the key is upc):
UPDATE products
SET name = new_items.name,
price = new_items.price
FROM products
INNER JOIN new_items
ON products.upc = new_items.upv
INSERT INTO products
(upc, name, price)
SELECT
upc,
name,
price
FROM TempTables.dbo.new_items
WHERE upc NOT IN
(SELECT upc FROM products)发布于 2014-03-19 15:45:42
UPDATE products
SET name = new_items.name, price = new_items.price
FROM products JOIN new_items USING(upc);
INSERT INTO products
(upc, name, price)
SELECT upc, name, price
FROM TempTables.dbo.new_items
WHERE NOT EXISTS (SELECT 1 FROM products WHERE upc = TempTables.dbo.new_items.upc);考虑到upc是你的Primary key,
在这里,如果已经有一个带有UPDATE的行,那么upc in new_items查询就会成功
如果不存在带有INSERT的行,则upc in new_items查询将成功。
https://stackoverflow.com/questions/22510763
复制相似问题