Использование внутреннего соединения может привести к исчезновению записей в таблице #temp. - PullRequest
0 голосов
/ 08 декабря 2011

Я новичок в SQL и работаю со следующим кодом, предоставленным нам одним из наших поставщиков:

SELECT DISTINCT MriPatients.PatientID
INTO #UniquePt
FROM MriPatients
INNER JOIN #TotalPopulation ON MriPatients.PatientID = #TotalPopulation.PatientID
Set @TotalUniquePatients = (Select Count(*) FROM #UniquePt)

Что происходит, если строка Set приводит к тому, что @TotalUniquePatients устанавливается в 0, хотяВ нашей базе данных есть много уникальных идентификаторов пациентов.Затем это значение затем используется в качестве знаменателя в делении, которое вызывает ошибку деления на 0.

Теперь мне кажется, что это легко исправить, используя COUNT DISTINCT в таблице MriPatients;тогда вам вообще не нужно создавать #UniquePt ... это единственное место, где используется таблица.Но я не понимаю, почему код при получении #UniquePt получает 0 результата.Если вы удаляете INNER JOIN, набор возвращает правильный результат ... так, что INNER JOIN делает с #UniquePt?

Если это имеет значение, мы используем SQL Server 2008.

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Результат равен 0 из-за 1 из 2 ситуаций:

  • #TotalPopulation пусто
  • #TotalPopulation не содержит записей, которые имеют то же значение для PatientID, что изаписи в MriPatients

Как вы заполняете #TotalPopulation?

A COUNT DISTINCT не обязательно будет делать то же самое.Это зависит от того, чем вы заполните #TotalPopulation.Если вам нужно только количество уникальных пациентов в MriPatients, тогда да, COUNT DISTINCT будет работать.Но если вы заполняете #TotalPopulation на основе какой-то логики, тогда COUNT DISTINCT не обязательно даст вам те же результаты, что и COUNT объединенных таблиц.

0 голосов
/ 08 декабря 2011

INNER JOIN заставляет вас вставлять ТОЛЬКО записи, которые соответствуют PatientID в таблицу #TotalPopulation.

Я полагаю, что нет, или эта таблица не заполнена, что вызывает проблему.

Есть ли причина, по которой вы присоединяетесь к нему?

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