0

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

就像是...

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

1 回答 1

1

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

此外,您需要为更新语句指定每个字段。这是我认为您正在寻找的示例:

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] 
于 2012-12-01T00:35:57.870 回答