Добавление INNER JOIN в запрос не должно увеличивать количество строк, возвращаемых правильно

У меня есть запрос, подобный следующему, который возвращает правильное количество строк, которое я ожидал. (Он должен соответствовать аналогичный запрос, который возвращает те же наборы данных, но с другой связанной информацией из других связанных таблиц.

SELECT *
FROM LK
INNER JOIN STC ON LK.V = STC.VI
LEFT OUTER JOIN BC ON LK.BC = BC.ID
LEFT OUTER JOIN K AS LT ON ISNULL(BC.ZA, LK.VH) = LT.KNN
WHERE
    LT.KI IS NOT NULL AND LT.KS = 0
  OR 
    LT.KI IS NULL 
ORDER BY
  LK.Z

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

Например:

SELECT *
FROM LK
INNER JOIN STC ON LK.V = STC.VI

INNER JOIN VK ON LK.V = VK.ID
INNER JOIN K AS A ON VK.AIN = A.KNN

LEFT OUTER JOIN BC ON LK.BC = BC.ID
LEFT OUTER JOIN K AS LT ON ISNULL(BC.ZA, LK.VH) = LT.KNN
WHERE
    LT.KI IS NOT NULL AND LT.KS = 0
  OR 
    LT.KI IS NULL 
ORDER BY
  LK.Z

Имеет ли это смысл? Как добавление еще двух внутренних объединений может привести к возвращению большего количества строк?

И еще к сути моей проблемы: как я могу настроить второй запрос, чтобы он возвращал те же строки, что и первый запрос, но с дополнительными столбцами из объединенные таблицы?

11
задан abatishchev 18 August 2010 в 07:36
поделиться

1 ответ

если на LK больше одного ВКонтакте, то количество строк будет увеличиваться. Я недостаточно понимаю вашу схему, чтобы исправить это.

16
ответ дан 3 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: