我们最近已将数据库从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 11的某个地方,子查询处理已更改。在ASE 11之前,“ IN”将为子查询返回的每个匹配行返回一行;即使值相同。 ASE 11向上纠正了此问题,因此将仅返回不同的值。我不记得这是否影响EXISTS功能,因为自Sybase ASE 11发布以来已有25年。
我不认为这可以通过选项进行配置。它可能需要更改代码,并且您声明没有源代码。
系统10是很久很久以前的了。我确实确实记得有与子查询有关的升级问题,但是现在细节很模糊。但是,当您查看查询时,ASE 15的结果是正确的。这与Richard Crossley对问题的回忆相吻合,这意味着版本10中的结果实际上是不正确的。