同一查询在Sybase 10和Sybase 15中显示不同的输出

问题描述 投票:0回答:2

我们最近已将数据库从Sybase 10迁移到Sybase 15。

当我在Sybase 10(SYC Sybase System 10)中执行以下查询时,它给我一行作为输出。

SELECT 
        'x'
    FROM
        employee
    WHERE
        EXISTS 
        (
            SELECT 
                    employee.emp_id 
                FROM 
                    employee 
                WHERE 
                    employee.branch_id = 3013 
                AND employee.emp_id = 20 
                AND employee.object_id > 1
        )

输出:

x
(1 row(s) affected)

当我在Sybase 15(SYC Adaptive Server Enterprise)中执行同一查询时,查询输出将生成1653行,这是employee表的总行数。

输出:

x
x
x
x
x
x
x
.....
(1653 row(s) affected)

您能帮我吗,因为我们的应用程序期望输出仅一行,而获取多行会造成问题。 (我们没有用于应用程序的代码来更改查询

sybase-ase
2个回答
0
投票

在昏暗和遥远的过去,可能是关于Sybase ASE 11的某个地方,子查询处理已更改。在ASE 11之前,“ IN”将为子查询返回的每个匹配行返回一行;即使值相同。 ASE 11向上纠正了此问题,因此将仅返回不同的值。我不记得这是否影响EXISTS功能,因为自Sybase ASE 11发布以来已有25年。

我不认为这可以通过选项进行配置。它可能需要更改代码,并且您声明没有源代码。


0
投票

系统10是很久很久以前的了。我确实确实记得有与子查询有关的升级问题,但是现在细节很模糊。但是,当您查看查询时,ASE 15的结果是正确的。这与Richard Crossley对问题的回忆相吻合,这意味着版本10中的结果实际上是不正确的。

© www.soinside.com 2019 - 2024. All rights reserved.