【发布时间】:2020-08-17 02:07:10
【问题描述】:
MS Access SQL - 这是一个与性能相关的通用重复问题。所以,我没有具体的示例查询,但我相信我已经在 3 个语句中清楚而简单地解释了下面的情况。
我有一个选择许多列的标准/复杂 SQL 查询;一些计算出来的,一些带星号的,还有一些按名称命名的——例如(tab1.*, (tab2.co1 & tab2.col2) as computedFld1, tab3.col4, etc)。
这个查询连接了大约 10 个表。 Where 子句基于用户指定的过滤器,这些过滤器可以基于所有 10 个表中存在的任何字段。
基于这些过滤器,我有时可以获得具有相同 tab4.ID 值的记录。
问题:消除具有相同 tab4.ID 值的重复结果行的最佳方法是什么。我不在乎哪些行被淘汰。它们会在不重要的方面有所不同。
或者,如果重要的话,它们会有所不同,因为它们将具有不同的 tab5.ID 值;我想用 LARGEST tab5.ID 值保留结果行。
但如果第一个查询比第二个查询执行得更好,那么我真的不在乎哪些行会被淘汰。性能更重要。
我早上大部分时间都在做这件事,我担心这个问题的答案超出了我的工资标准。我尝试过 Group By tab4.ID,但不能在 Select 子句中使用“*”;还有很多其他的事情,我只是经常把头撞到墙上。
【问题讨论】:
-
使用
SELECT *不是必须的,只是为了方便。那么为什么不直接列出您需要的列呢?