将一个表中的所有行插入到另一个没有相似值的行中?

时间:2012-11-30 23:57:54

标签: sql sql-server

我有两张桌子。一个主人和一个小主人。我只想将较小的所有行插入到主节点中,在某个字段中没有相同的值。我试过的是不行。还有一种方法可以指定行中的所有值而不是单独列出它们吗?

像...一样的东西。

Update Master
Set Master.[All Values] = Smaller.[All Values]
Inner join Smaller on Master.No = Smaller.No
where Master.No <> Smaller.No 

1 个答案:

答案 0 :(得分:1)

问题似乎是你试图在同一列(.No)上等同和否定 - 它永远不会返回任何行。我相信你的意思是否定一个不同的专栏。

此外,您还需要为update语句指定每个字段。 以下是我认为您正在寻找的一个例子:

CREATE TABLE [master] (a int, b int, c int)
CREATE TABLE [smaller] (a int, b int, c int)

INSERT INTO [master] (a, b, c) 
  VALUES (1, 0, 1), (2, 1, 2), (3, 1, 3), (4, 2, 4), (5, 3, 5), (6, 5, 6)
INSERT INTO [smaller] (a, b, c) 
  VALUES (3, 1, 3), (4, 0, 4), (5, 0, 5), (7, 8, 7), (8, 13, 8)

-- note values for 'b' on row 4, 5
SELECT * FROM [master] 

UPDATE [master] 
SET [master].b = [smaller].b, 
    [master].c = [smaller].c
FROM [smaller] INNER JOIN [master] 
  ON  [master].a = [smaller].a 
  AND [smaller].b <> [master].b

-- note values for 'b' on row 4, 5
SELECT * FROM [master] 

DROP TABLE [master] 
DROP TABLE [smaller]