SQL, заменяющий COUNT (*) на EXISTS - PullRequest
0 голосов
/ 01 ноября 2019

В настоящее время у меня есть запрос, который находит пользователя с данным id и возвращает имя пользователя и int, если запись с данным идентификатором существует в таблице x.

SELECT 
    username
    (SELECT COUNT(*) FROM x WHERE x.id = users.id) inTableX
FROM users
WHERE users.name = @name;

Столбец x.id - это уникальный ключ, и такой inTableX вернет 0, если его нет, и 1, если он существует. Таким образом, текущий работает, но мое текущее предположение состоит в том, что есть лучшее ключевое слово для использования, которое скажет mssql прекратить итерацию / поиск, когда он найдет строку / запись, которая удовлетворяет условию WHERE. Поскольку в таблице x есть много записей, я надеюсь, что решение улучшит производительность этого запроса.

Ответы [ 2 ]

4 голосов
/ 01 ноября 2019

Это эквивалентная версия с EXISTS:

SELECT 
    users.name,
    case when exists (select 1 FROM x WHERE x.id = users.id) then 1 else 0 end
FROM users
WHERE users.name = @name;

Она вернет 1, если в x.

есть строка с таким идентификатором.
2 голосов
/ 01 ноября 2019

Вы можете попробовать:

SELECT 
    username,
    CASE WHEN x.id IS NULL THEN 0 ELSE 1 END AS inTableX
FROM users LEFT JOIN x
     ON x.id = users.id
WHERE users.name = @name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...