在Microsoft Access中 -
我有两张桌子,我们称之为OneTbl和TwoTbl
我想做两件事:
从OneTbl中提取所有记录,只从TwoTbl中提取记录 TwoTbl.ID存在于OneTbl.ID
从TwoTbl中提取未在第一个查询中提取的记录
我尝试为第一个做左连接,但数据重复。这是一个问题。这两个表共享所有相同的字段,它们只有不同的数据。
在我完成初始运行后,我做了一个不同的ID计数。从理论上讲,上面列出的查询1和2的计数应该与表1和表2之间的计数相同。那种情况没有发生。
以下是我为1号编写的查询,然后我将其粘贴到excel选项卡的末尾,该选项卡包含表1中的所有记录:
SELECT DISTINCT T2.*
FROM T2 INNER JOIN T1 ON T2.[Payee NPI] = T1.[Payee NPI];
这是我为数字2写的,以获取表2中未在第一个查询中提取的所有剩余记录:
SELECT DISTINCT T2.*
FROM T2 LEFT JOIN T1 ON T2.[Payee NPI] = T1.[Payee NPI]
WHERE T1.[Payee NPI] IS NULL
答案 0 :(得分:1)
可以使用EXISTS和NOT EXISTS:
SELECT *
FROM OneTbl
UNION ALL
SELECT *
FROM TwoTbl t2
WHERE EXISTS
(SELECT 1
FROM OneTbl t1
WHERE t1.ID=t2.ID)
SELECT *
FROM TwoTbl t2
WHERE NOT EXISTS
(SELECT 1
FROM OneTbl t1
WHERE t1.ID=t2.ID)
答案 1 :(得分:0)
这两个表共享所有相同的字段,它们只是有不同的 数据
那么为什么不在他们之间执行UNION
说
select * from OneTbl
union
select * from TwoTbl
从OneTbl中提取所有记录,只从TwoTbl中提取记录 TwoTbl.ID存在于OneTbl.ID
中
LEFT JOIN
就是你想要的
select t1.*, t2.*
from OneTbl t1 left join TwoTbl t2 on t1.ID = t2.ID;
从TwoTbl中提取未在第一个查询中提取的记录
您可以使用LEFT JOIN
WHERE IS NULL
select t2.* from OneTbl t1
left join TwoTbl t2 on t1.ID = t2.ID
where t2.ID is null;
答案 2 :(得分:0)
你似乎想要这样的东西:
select t1.*
from OneTbl as t1
where exists (select 1 from TwoTbl as t2 where t2.id = t1.id);
和
select t2.*
from TwoTbl as t2
where not exists (select 1 from OneTbl as t1 where t2.id = t1.id);