在SELECT查询中包含DISTINCT是否意味着应该对结果集进行排序?
我不认为它,但我正在寻找一个权威的答案(网络链接).
我有这样的查询:
Select Distinct foo
From Bar
Run Code Online (Sandbox Code Playgroud)
在oracle中,结果是截然不同的,但不是按排序顺序排列的.在Jet/MS-Access中,似乎还有一些额外的工作要确保结果是排序的.我假设oracle在这种情况下遵循规范并且MS Access已经超越了.
另外,有没有办法可以给表提示它应该排序foo
(除非另有说明)?
我在一个我继承的应用程序中遇到了一个查询,如下所示:
Select *
From foo
where
1 <> 1
Run Code Online (Sandbox Code Playgroud)
当我解析它时,它应该什么都不返回(1 <> 1
应该评估为false,对吧).但是(至少在我的Oracle盒子上)它会返回一个完整的所有内容列表foo
.当我在MSAccess/Jet和MSSQL中尝试相同的事情时,我得到了我期望的行为.为什么它与Oracle不同(为什么原始开发人员想要这样做)?
注意:我看到一些关于使用"where 1 = 1"的+ s和-s的迷信,它会导致全表扫描; 但我不认为这是原始开发者的意图.
小更新:
在这种情况下foo
是一个视图.当我在实际的桌子上尝试相同的事情时,我会得到我期望的(没有行).
更新2:
我已经在兔子洞的下方进一步遵循代码,并确定他正在做的只是尝试获取字段/列名称.我仍然不知道为什么它会返回完整的记录集; 但仅限于观点.
从字面上看,他正在用字符串构建查询并将其传递给另一个函数以便不加改变地执行.
'VB6
strSQL = "SELECT * FROM " & strTableName & " WHERE 1 <> 1"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,strTableName包含视图的名称.
更新3:
作为参考,这里是我遇到问题的一个视图(我已经更改了字段/表/模式名称)
CREATE OR REPLACE FORCE VIEW scott.foo (field1,
field2,
field4,
field5,
field12,
field8,
field6,
field7,
field16,
field11,
field13,
field14,
field15,
field17
)
AS
SELECT bar.field1,
bar.field2,
DECODE
(yadda.field9, NULL, 'N',
DECODE (yadda.field3, NULL, …
Run Code Online (Sandbox Code Playgroud)