繁体   English   中英

MS Access SQL - 从查询中删除重复项

[英]MS Access SQL - Removing Duplicates From Query

MS Access SQL - 这是一个与性能相关的通用重复问题。 所以,我没有具体的示例查询,但我相信我已经在 3 个语句中清楚而简单地解释了下面的情况。

我有一个选择许多列的标准/复杂 SQL 查询; 一些计算出来的,一些带星号的,还有一些按名字命名的——例如(tab1.*、(tab2.co1 & tab2.col2)作为computedFld1、tab3.col4 等)。

此查询连接大约 10 个表。 Where 子句基于用户指定的过滤器,这些过滤器可以基于所有 10 个表中存在的任何字段。

基于这些过滤器,我有时可以获得具有相同tab4.ID值的记录。

问题:消除具有相同tab4.ID值的重复结果行的最佳方法是什么。 我不在乎哪些行被淘汰。 它们将在不重要的方面有所不同。

或者,如果重要的话,它们会有所不同,因为它们将具有不同的 tab5.ID 值; 我想用 LARGEST tab5.ID 值保留结果行。

但是如果第一个查询比第二个查询执行得更好,那么我真的不在乎哪些行被消除了。 性能更重要。

我早上大部分时间都在做这件事,我担心这个问题的答案超出了我的工资标准。 我试过 Group By tab4.ID,但不能在 Select 子句中使用“*”; 还有很多其他的事情,我只是不停地把头撞到墙上。

Access 不支持 CTE,但您可以对已保存的查询执行类似的操作。
因此,首先为查询中具有相同名称的列设置别名,例如:

SELECT tab4.ID AS tab4_id, tab5.ID AS tab5_id, ........

然后将您的查询保存为例如myquery

然后你可以像这样使用这个保存的查询:

SELECT q1.*
FROM myquery AS q1
WHERE q1.tab5_id = (SELECT MAX(q2.tab5_id) FROM myquery AS q2 WHERE q2.tab4_id = q1.tab4_id)

如果每个tab4_id没有重复的tab5_id ,这将为每个tab4_id返回 1 行。
如果有重复,那么您必须提供附加条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM