SQL это одно и то же? - PullRequest
       13

SQL это одно и то же?

2 голосов
/ 15 февраля 2011

Это то же самое?

INNER JOIN dbo.ReportingLevels rl ON e.ei_CompanyID = rl.rl_CompanyId
    AND e.ei_Level = rl.rl_index
    AND EXISTS (SELECT * FROM @ReportingLevelId rlid
                WHERE rlid.[reportLevelName] = rl.[rl_name])    
    AND EXISTS (SELECT * FROM @ReportingLevelId rlid
                WHERE rlid.[companyid] = rl.[rl_CompanyId])

А вот и второе.

INNER JOIN dbo.ReportingLevels rl ON e.ei_CompanyID = rl.rl_CompanyId
    AND e.ei_Level = rl.rl_index
    AND EXISTS (SELECT * FROM @ReportingLevelId rlid
                WHERE rlid.[reportLevelName] = rl.[rl_name]
                  AND rlid.[companyid] = rl.[rl_CompanyId]))    

Я думаю, что это то же самое, но однажды я получил странный результат, когда использовал аналогичный вариант этого.

Ответы [ 2 ]

8 голосов
/ 15 февраля 2011

Нет, это не так. Первый выберет строку, если rl_name и rl_CompanyId присутствуют в таблице @ReportingLevelId, но не обязательно в одной строке. Второй требует, чтобы эти значения присутствовали в одной строке.

0 голосов
/ 15 февраля 2011

Проблема в вашем secound sql, вы используете И вместо ИЛИ. Вы можете увидеть правильное выше.

INNER JOIN dbo.ReportingLevels rl ON e.ei_CompanyID = rl.rl_CompanyId AND e.ei_Level = rl.rl_index
AND EXISTS (SELECT * FROM @ReportingLevelId rlid WHERE rlid.[reportLevelName] = rl.[rl_name] OR rlid.[companyid] = rl.[rl_CompanyId]))   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...