我有两张桌子。一主一小。我只想将较小的所有行插入到主控中,在某个字段中没有相同的值。我尝试过的方法不起作用。还有一种方法可以指定行中的所有值而不是单独列出它们吗?
就像是...
Update Master
Set Master.[All Values] = Smaller.[All Values]
Inner join Smaller on Master.No = Smaller.No
where Master.No <> Smaller.No
我有两张桌子。一主一小。我只想将较小的所有行插入到主控中,在某个字段中没有相同的值。我尝试过的方法不起作用。还有一种方法可以指定行中的所有值而不是单独列出它们吗?
就像是...
Update Master
Set Master.[All Values] = Smaller.[All Values]
Inner join Smaller on Master.No = Smaller.No
where Master.No <> Smaller.No
问题似乎是您试图在同一列 (.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]