这个问题表述的不是很清楚,像是考语文能力了!尝试理解如下:
回答问题前需要确定表结构。这里假定两张表结构分别为
新表(A ID,A)
旧表(B ID,B)
1)查询新表较之于旧表有变更的情况
要求选出“新表”中[A ID]字段与”旧表“中[B ID]字段存在交集的记录,并增加一个[备注]字段,此字段值只有两种状态——“更改”和“未更改”,判断的标准是同ID的情况下如果”新表“的字段[A]与”旧表“的字段[B]相同则返回”未更改“,反之返回”更改“(如果”旧表“的[B ID]有重复则只取其同ID的首条记录中的[B]做判断,这个原则与提问中的自定义判断函数IIX里引用DLookup函数的处理是一致的);
+ 选出”新表“中[A ID]字段与”旧表“中[B ID]字段无交集的记录,并增加一个[备注]字段,对于检索出来的记录此字段值只有一种状态——"新增" ;
+选出”旧表“中[B ID]字段与”新表“中[A ID]字段无交集的记录,并增加一个[备注]字段,对于检索出来的记录此字段值只有一种状态——"取消"。
SQL实现代码
select a.[A ID] as ID,a.A, iif(a.A=b.B1,"未更改","更改") as 备注 from 新表 a,
(select [B ID],first(B) as B1 from 旧表 group by [B ID])b
where a.[A ID]=b.[B ID]
union all
select a.[A ID],a.A,"新增" from 新表 a where not exists(
select 1 from 旧表 b where b.[B ID]=a.[A ID])
union all
select a.[B ID],a.B,"取消" from 旧表 a where not exists(
select 1 from 新表 b where b.[A ID]=a.[B ID]);
2)反过来,查询旧表较之于新表有变更的情况
要求选出“旧表”中[B ID]字段与“新表”中[A ID]字段存在交集的记录,并增加一个[备注]字段,此字段值只有两种状态——“更改”和“未更改”,判断的标准是同ID的情况下如果“旧表”的字段[B]与“新表”的字段[A]相同则返回“未更改”,反之返回“更改“(如果”新表“的[A ID]有重复则只取其同ID的首条记录中的[A]做判断);
+ 选出”旧表“中[B ID]字段与”新表“中[A ID]字段无交集的记录,并增加一个[备注]字段,对于检索出来的记录此字段值只有一种状态——"新增" ;
+选出”新表“中[A ID]字段与”旧表“中[B ID]字段无交集的记录,并增加一个[备注]字段,对于检索出来的记录此字段值只有一种状态——"取消"。
SQL实现代码
select a.[B ID] as ID,a.B, iif(a.B=b.A1,"未更改","更改") as 备注 from 旧表 a,
(select [A ID],first(A) as A1 from 新表 group by [A ID])b
where a.[B ID]=b.[A ID]
union all
select a.[B ID],a.B,"新增" from 旧表 a where not exists(
select 1 from 新表 b where b.[A ID]=a.[B ID])
union all
select a.[A ID],a.A,"取消" from 新表 a where not exists(
select 1 from 旧表 b where b.[B ID]=a.[A ID]);
上面的代码无需借助自定义函数,运行效率会高不少。如果我的理解不是你要的、或者接近但是需要补充,请追问,我再尝试调整相关代码。
我不知道是不是明白了你的意思
能否这样 两个表互相做一个左连接的查询,空值或者说用NZ(字段,“新增”)来显示出变化。