【问题标题】:Join record between table only once in MS Access在 MS Access 中,表之间只加入一次记录
【发布时间】:2017-05-30 10:06:39
【问题描述】:

我有tbl1这样的结构

Name         Type
======        =====
John             1
David            1
Jane             2
William          3
Alex             2
Ryan             1  

tbl2 的结构是这样的

Index   Type     Job
  1       1      Clean
  2       1      Wash
  3       2      Carry
  4       2      Package
  5       3      Sell

我想加入匹配Type的记录,但tbl1中的每条记录只加入一次tbl2中的一条记录

即:

如果 JohnClean 连接,然后David 必须与Wash 连接。或者如果JohnWash 连接,那么David 必须与Clean 连接。

David 是否与 WashClean 加入无关,我只需要将它们加入符合条件的记录并加入一次。

我会确保'tbl1'中的每个Type在'tbl2'中都有等量的记录

我主要做MS Access,所以最好在这个环境下查询~谢谢大家的阅读。

最好的问候

【问题讨论】:

  • tbl1 中似乎有多余的记录。你想用这个记录做什么?
  • 如果这不是 Sql Server 则删除标签。
  • 您在tbl1 中也有带有type=1 的“Ryan”。那么,该行与tbl2 的预期关系是什么?
  • 是的,如果它可以为“Ryan”显示Null,那是最好的,但否则我会确保tbl2中还有另一个type=1记录以匹配金额在tbl1

标签: sql ms-access join


【解决方案1】:

试试下面的查询。

select name, (select TOP(1) job from tbl2 where tbl1.type = tbl2.type) from tbl1

希望对你有帮助

【讨论】:

  • 子选择不选择任何东西。
  • 这个查询使得“John”和“david”和“ryan”都与“clean”匹配
  • John、david 和 ryan 类型为 1,即 Clean。您说 David 加入 Wash 或 Clean 无关紧要,我只需要将它们加入符合条件的记录并加入 ONCE。
  • 我的意思是如果John DID 加入了Clean,那么David 不能加入Clean 并且必须加入其他选项,即Wash。我的意思是不管是:John - Clean,David-Wash 还是 John - Wash,David - Clean
  • 我明白了。然后最简单的方法是拥有排名列,这样您就可以按排名进行比较以避免重复。映射表本身已经是一个问题,因为单一类型具有超过 1 个值。它违反了键值映射。
猜你喜欢
  • 2021-04-17
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多