Один и тот же запрос показывает разные результаты в Sybase 10 и Sybase 15 - PullRequest
0 голосов
/ 10 февраля 2020

Мы недавно перенесли нашу базу данных из Sybase 10 в Sybase 15.

Когда я выполняю приведенный ниже запрос в Sybase 10 (SY C 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 (SY C Adaptive Server Enterprise), результат вывода генерирует 1653 строки, что является общим числом строк таблицы сотрудников.

Вывод:

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

Не могли бы вы мне помочь, поскольку наше приложение ожидает только одну строку в качестве вывода, а получение нескольких строк создает проблему. ( У нас нет кода для приложения, чтобы изменить запрос ).

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Система 10 очень и очень долго go. Я действительно помню, что были проблемы с обновлением, связанные с подзапросами, но детали неясны сейчас. Однако, если вы посмотрите на запрос, результат по ASE 15 будет правильным. Это будет соответствовать воспоминаниям Ричарда Кроссли о проблеме, а это означает, что результат в версии 10 на самом деле был неверным.

0 голосов
/ 11 февраля 2020

Где-то в далёком и далёком прошлом, возможно, в Sybase ASE 11, обработка подзапросов изменилась. До ASE 11 «IN» возвращал одну строку для каждой совпадающей строки, возвращаемой из подзапроса; даже если значения были одинаковыми. ASE 11 вверх исправил это, так что будут возвращены только различные значения. Я не могу вспомнить, влияет ли это на функцию EXISTS или нет, поскольку с момента выпуска Sybase ASE 11 прошло 25 лет.

Не думаю, что это можно настроить с помощью опции. Это может потребовать изменения кода, и вы заявляете, что у вас нет исходного кода.

...