Sql 简单的结合,但是

Sql 简单的结合,但是,sql,ms-access,Sql,Ms Access,我既不是程序员,也不是SQL专家,目前正在开发一个小的MS Access数据库,我正处于一个进退两难的境地。我知道,这很方便,但适合这份工作 这就是我的问题。 我有两张桌子: Table A: Order - ProjectNr - Description - CompanyID A111 444 xxx 999 A333 444 xxx 999 A444 444 xxx

我既不是程序员,也不是SQL专家,目前正在开发一个小的MS Access数据库,我正处于一个进退两难的境地。我知道,这很方便,但适合这份工作

这就是我的问题。 我有两张桌子:

Table A:
Order - ProjectNr - Description - CompanyID
A111    444         xxx           999
A333    444         xxx           999
A444    444         xxx           999
...
所以这两个表几乎相同,但OrderNr不同。它们的开头不同,但在第一个角色之后它们是相同的。 现在我想合并这两个表-通过简单的并集来完成

问题是,如果已经有一个ProjectNr的OrderNr以“a”开头,我不想要“B”OrderNr。在联盟的结果中

因此,在上述示例中,结果应为:

Order - ProjectNr - Description - CompanyID
A111    444         xxx           999
B222    444         xxx           999
A333    444         xxx           999
A444    444         xxx           999
没有B333,因为已经有A333入口

当然,通过我的简单结合,我得到了A333和B333


您可以在MS Access 2016中为我提供一些帮助吗?

您可以使用
不存在

select * from TableA
union all
select b.* from TableB as b
where not exists (
  select 1 from TableA as a
  where mid(a.order, 2) = mid(b.order, 2)
)
所以这两个表几乎相同,但OrderNr不同

基于这个前提,我会在继续之前对DB结构提出疑问。 你设计了数据库表吗?您真的需要有两个具有相同数据类型的表吗?似乎一张带有额外字段的表会更好。 比如:

Table A:
OrderCode    Order  ProjectNr   Description   CompanyID
A            111    444         xxx           999
A            333    444         xxx           999
A            444    444         xxx           999
B            222    444         xxx           999
B            333    444         xxx           999
而这反过来又应该被推翻

“not exists”解决方案可以工作,但并不理想,尤其是在将其应用于大型表时,因为它不会使用索引表,从而导致性能低下

Table A:
OrderCode    Order  ProjectNr   Description   CompanyID
A            111    444         xxx           999
A            333    444         xxx           999
A            444    444         xxx           999
B            222    444         xxx           999
B            333    444         xxx           999