1

我想将 tblA 的唯一值添加到 tblB 而不创建基于多个字段的重复值。在以下示例中,FirstName 和 LastName 确定重复项,Foo 和 Source 无关紧要。

tblA:

名字姓氏Foo来源
约翰·多伊 1 A
简·多伊 2 A
史蒂夫史密斯 3 A
比尔约翰逊 2 A

表:

名字姓氏Foo来源
约翰·多伊 1 B
鲍勃·史密斯 5 B
史蒂夫·史密斯 4 B

这是我想要的结果:

tblA:

名字姓氏Foo来源
约翰·多伊 1 A
简·多伊 2 A
史蒂夫史密斯 3 A
比尔约翰逊 2 A
鲍勃·史密斯 5 B  

这是我尝试过的代码的等价物:

INSERT INTO tblA
SELECT B.* FROM tblB AS B
LEFT JOIN tblA AS A ON A.FirstName = B.FirstName AND A.LastName = B.LastName
WHERE A.FirstName IS NULL

这是我得到的结果:

tblA:

名字姓氏Foo来源
约翰·多伊 1 A
简·多伊 2 A
史蒂夫史密斯 3 A
比尔约翰逊 2 A
约翰·多伊 1 B
鲍勃·史密斯 5 B

来自 tblB 的 Steve Smith 被忽略了,这很好。添加了来自 tblB 的 John Doe,这很糟糕。我在这方面花费了太多时间,并且我已经以我能想到的各种方式检查了数据,以确保 tblA 和 tblB 中的 John Doe 的名字和姓氏相同。关于可能出现问题的任何想法?

更新:仅供参考,在我真正的 tblB 上,30,000 中的大约 10,000 应该移动到 tblA。这实际上移动了 21,000 多个。问题是这是一个常见过程的一个步骤。

4

3 回答 3

1

当我尝试:

SELECT tbb.*
FROM tbb 
LEFT JOIN tba 
ON (tbb.FirstName = tba.FirstName) 
   AND (tbb.LastName = tba.LastName)
WHERE (((tba.LastName) Is Null));

返回的唯一行是:

Bob        Smith     5    B

约翰·多伊有没有可能有一个隐藏的角色?

于 2012-08-02T21:18:46.063 回答
0

编辑:对不起,它不适用于 Access2007

你有很多方法可以做到这一点:

INSERT INTO tblA 
SELECT B.* FROM tblB AS B 
WHERE B.firstname, B.lastname NOT IN (select firstname, lastname from tblA)

或者

INSERT INTO tblA 
SELECT * FROM tblB
MINUS
SELECT * FROM tblA
于 2012-08-02T21:09:01.377 回答
0

这个在 Access 中工作。

您可以将它运行到无穷大 - 它不会添加比需要更多的行:

INSERT INTO tblA
SELECT B.*
FROM tblB AS B
WHERE (((B.FirstName) Not In (select firstname from tblA))
AND ((B.LastName) Not In (select firstname from tblA)))
于 2013-04-05T15:45:29.237 回答