Добавление INNER JOIN к запросу не должно увеличивать количество возвращаемых строк, верно? - PullRequest
10 голосов
/ 18 августа 2010

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

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

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

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

1 Ответ

15 голосов
/ 18 августа 2010

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

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