首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表中插入或更新

从表中插入或更新
EN

Stack Overflow用户
提问于 2014-03-19 15:33:20
回答 3查看 77关注 0票数 4

我需要从另一个表中插入几条记录,如果有一个重复的键,则从同一个表中更新当前记录。

我在这个网站上找到了几个有用的答案,但似乎没有一个对我有用。所有返回一个语法错误,我不确定是否仅仅是我使用的接口不支持这些命令什么的。插入没有重复键的地方,此查询工作正常。如果有任何方法,任何人都可以使用什么样的语法来正确地执行这些命令,我将非常感激!

以下是那些似乎完全满足了我的需求,但却没有奏效的人。

代码语言:javascript
复制
REPLACE INTO
INSERT ... ON DUPLICATE KEY UPDATE
INSERT OR REPLACE INTO

下面是我的INSERT查询当前的示例:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2014-03-19 17:06:42

我个人喜欢MERGE的声明

代码语言:javascript
复制
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)
;

要查看您已经使用过的项,您可以这样查询

代码语言:javascript
复制
-- 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之后,您将不知道哪些项已经存在,哪些项已经插入。如果您想知道您需要在表中添加一个“更新日期”列并在那个时候标记它。

票数 3
EN

Stack Overflow用户

发布于 2014-03-19 15:37:12

我需要做的是从另一个表中插入几条记录,在其中有一个重复的键,而不是从同一个表中更新当前记录。

这通常分两个步骤完成(一些SQL服务器有一个语法可以在一步内完成,但更通用的方法是两个步骤)

代码语言:javascript
复制
(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)
票数 0
EN

Stack Overflow用户

发布于 2014-03-19 15:45:42

代码语言:javascript
复制
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查询将成功。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22510763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档