[英]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.