我想在不创建基于多个字段的重复值的情况下将tblA的唯一值添加到tblB。在以下示例中,FirstName和LastName确定重复,Foo和Source无关。
TBLA:
FirstName LastName Foo Source John Doe 1 A Jane Doe 2 A Steve Smith 3 A Bill Johnson 2 A
tblB:
FirstName LastName Foo Source John Doe 1 B Bob Smith 5 B Steve Smith 4 B
这是我想要的结果:
tblA:
FirstName LastName Foo Source John Doe 1 A Jane Doe 2 A Steve Smith 3 A Bill Johnson 2 A Bob Smith 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:
FirstName LastName Foo Source John Doe 1 A Jane Doe 2 A Steve Smith 3 A Bill Johnson 2 A John Doe 1 B Bob Smith 5 B
来自tblB的Steve Smith被忽略了,这很好。添加来自tblB的John Doe,这很糟糕。我花了太多时间在这上面,我已经按照我能想到的每一种方式检查数据,以确保tblA和tblB中的John Doe是相同的名字和姓氏。关于什么可能出错的任何想法?
更新:仅供参考,在我的实际tblB上,大约10,000个30,000应该转移到tblA。这实际上超过21,000。问题是这是一个共同过程的一步。
答案 0 :(得分: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
John Doe有可能隐藏角色吗?
答案 1 :(得分: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
答案 2 :(得分: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)))