Переменная SQL Server после подзапроса в select - PullRequest
0 голосов
/ 21 января 2019

У меня есть запрос, как показано ниже.Меня беспокоит то, что этот запрос не будет работать, пока я не добавлю что-то после подзапроса.Я никогда не сталкивался с такими вещами в SQL.Мой лидер попросил меня поставить переменную после последней закрывающей скобки, и я боюсь, почему и любопытно, почему у нас должна быть переменная.Я использую SQL Server 2005.

SELECT COUNT(*) 
FROM  
    (SELECT ID 
     FROM NAMES N 
     LEFT JOIN PEOPLE P ON N.ID = P.ID 
     WHERE P.NAME = @name
     GROUP BY ID)

Этот ниже работает как шарм.Не понимаю, зачем ставить что-то после скобки.

SELECT COUNT(*) 
FROM   
    (SELECT ID 
     FROM NAMES N 
     LEFT JOIN PEOPLE P ON N.ID = P.ID 
     WHERE P.NAME = @name
     GROUP BY ID) Temp

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Более простой способ написать это:

SELECT COUNT(DISTINCT P.ID)
FROM PEOPLE P
WHERE P.NAME = @name;

Ваш LEFT JOIN превращается в INNER JOIN с помощью предложения WHERE в любом случае (должно быть совпадение).Тогда JOIN не является необходимым, потому что вы считаете ID, который используется для JOIN.Вы можете просто посчитать соответствующие идентификаторы в PEOPLE.ID не может быть NULL, поскольку он используется для JOIN.

Если ID уникален в PEOPLE, то:

SELECT COUNT(*)
FROM PEOPLE P
WHERE P.NAME = @name;
0 голосов
/ 21 января 2019

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

При этом вы хотите сделать одно из следующих действий:

SELECT ID, COUNT(*) 
FROM NAMES N LEFT JOIN PEOPLE P 
                            ON N.ID = P.ID
WHERE P.NAME = @name
GROUP BY ID

или

SELECT COUNT(*) 
FROM NAMES N LEFT JOIN PEOPLE P 
                            ON N.ID = P.ID
WHERE P.NAME = @name

Редактировать: ВидяВаш комментарий и, как упомянул @GordonLinoff, вы также можете попробовать следующий запрос;нет соединения.

SELECT COUNT(*) 
FROM PEOPLE
WHERE NAME = @name

Обратите внимание, что результатом будет тот же только , если Names.id или People.id уникальны.Если ни одно из 2 полей не заполнено, то количество будет другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...