如何解决MS Access SQL-从查询中删除重复项
MS Access SQL-这是一个与性能相关的一般性重复问题。因此,我没有特定的示例查询,但是我相信我已经用3条语句清楚,简单地解释了以下情况。
我有一个标准/复杂的SQL查询,它选择许多列;有些是经过计算的,有些是带星号的,有些是按名称命名的-例如(tab1。*,(tab2.co1和tab2.col2)的形式为computeFld1,tab3.col4等)。
此查询联接约10个表。而Where子句基于用户指定的过滤器,这些过滤器可以基于所有10个表中存在的任何字段。
基于这些过滤器,有时我可以获得具有相同 tab4.ID 值的记录。
问题:消除具有相同 tab4.ID 值的重复结果行的最佳方法是什么?我不在乎哪些行被淘汰。它们在不重要的方面会有所不同。
或者,如果重要,它们将有所不同,因为它们将具有不同的tab5.ID值;并且我想将结果行保留为LARGEST tab5.ID值。
但是,如果第一个查询的性能优于第二个查询,那么我真的不在乎哪些行被消除了。性能更重要。
我在整个上午的大部分时间里都在工作,我担心对此的答案超出了我的薪资范围。我已尝试使用Tab4.ID进行分组,但是不能在Select子句中使用“ *”;还有很多其他事情,我只是不断地撞在墙上。
解决方法
访问不支持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行。
如果重复,则必须提供其他条件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。