【问题标题】:MsAccess SQL: how to prevent duplicates from Select queryMs Access SQL:如何防止 Select 查询重复
【发布时间】:2019-01-08 23:51:44
【问题描述】:

我有一个 Select 查询(许多字段和一些计算字段),它使用非平凡的 Where 子句和 Order By 子句连接许多表。根据用户过滤器,它可以根据连接表之一的 ID 返回重复记录。我想消除所有具有重复 table1.ID 值的结果行。

例子:

Select a.fld1, b.fld2, c.fld3, d.fld4 from (((tablea join tableb on a.x=b.x)
 join tablec on c.x=a.x) join tabled on d.x=a.x where blah-blah.

这将返回:

a.fld1, b.fld2, c.fld3, d.fld4
1, 2, 3, 4
1, 21, 3, 4
2, 2, 3, 4
2, 22, 3, 4

我想消除具有重复 a.fld1 值的额外行。 b.fld2 会有所不同,我不在乎哪些记录会被遗漏。但我确实需要 b.fld2 中的至少一个值用于其他查找目的。

我似乎想不出一个好的方法来做到这一点。

谢谢, 杰夫

【问题讨论】:

  • 如果不知道您的查询和架构,但您知道 SELECT DISTINCT 吗?
  • 是的 - 谢谢。我知道 DISTINCT。当我从许多表中选择许多字段时,也许我不明白如何使其工作,有些是计算的,有些是'table.*'。我的模式没有什么独特之处;只是表格和字段。
  • 你看到有些返回的字段不一样,我也不在乎,我只需要根据一个表中的一个字段排除重复项即可。
  • 如果您要返回您不关心但不是唯一的列,那么您需要指定您想要的多个值中的哪一个,或者留下列并按照建议使用 Distinct。 SQL 不知道认为哪些列很重要,它对完整的结果集感兴趣。
  • 这个问题真的需要minimal reproducible example。是的,创建一个是可行的,但如果没有它,我看不出我们如何为您提供帮助。

标签: sql ms-access-2007


【解决方案1】:

(也许我通常喜欢将这个提议的解决方案写成评论,但此时我仍然需要更高的声誉才能编写 cmets。)

仅查看您的输出,您似乎可以只使用您拥有的 SQL 并将其全部用作新 SQL 语句中的子查询,该语句按第一个字段分组(并且还获得第一个值或最低值或只要您认为适合其他字段的任何内容,只要结果行中不同字段中的数据可能来自不同记录即可)...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多