объединение большего количества таблиц позволяет получать меньше данных из запроса - PullRequest
0 голосов
/ 15 ноября 2010

У меня есть одна проблема с одним SP, когда я присоединяюсь к некоторым конкретным таблицам, я получаю меньше данных от SP, чем когда они не включены в SP. Я пока не получаю от них никаких данных, я просто присоединяюсь к ним, и только это заставляет SP отправлять мне меньше данных. Есть идеи, в чем может быть проблема? Спасибо

Ответы [ 6 ]

2 голосов
/ 15 ноября 2010

Похоже, что в таблицах, к которым вы присоединяетесь, нет подходящих строк.

Если вы измените соединение на LEFT OUTER JOIN, вы должны получить ожидаемые строки (но, очевидно,проверьте вывод, чтобы убедиться, что вы делаете!)

1 голос
/ 15 ноября 2010

Соединения обычно имеют условие соединения в предложении «ON».Это условие говорит о том, как сопоставлять строки между объединяемыми таблицами.Если для определенной строки на одной стороне нет соответствующей строки на другой стороне, то нам нужно рассмотреть, с каким типом объединения мы имеем дело:

Для ВНУТРЕННЕГО СОЕДИНЕНИЯ строка будетDiscarded.

Для LEFT JOIN, и если строка происходит из источника таблицы «LEFT», то эта строка появится, но с NULL для всех столбцов из источника таблицы «RIGHT».

ПРАВИЛЬНОЕ СОЕДИНЕНИЕ аналогично левому соединению со сменными направлениями.

0 голосов
/ 15 ноября 2010

См. этот блог Джеффа Этвуда .Это объясняет SQL-соединения очень хорошо .Я думаю, что это ответит на ваш вопрос о том, почему определенные наборы данных могут отсутствовать или отсутствовать.

0 голосов
/ 15 ноября 2010

Я не знаю, какое объединение вы делаете, но существует три вида объединения

  • ВНУТРЕННЕЕ СОЕДИНЕНИЕ: извлекает данные, совпадающие с обеих сторон

  • LEFT (OUTER) JOIN: Извлекает данные, которые совпадают только с левой стороны, даже если право равно нулю

  • RIGHT (OUTER) JOIN Извлекает данные, которые встречаются толькос правой стороны, даже если left равно нулю

В зависимости от того, какой из них вы используете, данные можно получить или нет.

Но размещение вашего запроса позволит нам сообщитьВы в чем может быть настоящая проблема.

Надеюсь, я смогу помочь,

0 голосов
/ 15 ноября 2010

Похоже, вы делаете INNER JOIN.Это вернет запись, только если свойство, к которому вы присоединяетесь, находится в обеих таблицах.Например:

Customers
ID    Name
1     Mike
2     Steve
3     Amy

Address
ID    Address
1     123 Main
3     456 Oak

Если вы

SELECT Name, Adddress FROM NAME N
   Join Address A ON N.Id = A.Id

Только записи для Майка и Эми будут возвращены, потому что у Стива нет записи адреса.

0 голосов
/ 15 ноября 2010

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

Вы можетехотите опубликовать 2 версии SP, одну с несколькими таблицами, а затем одну с одним или несколькими объединениями, чтобы лучше объяснить, что происходит за кулисами.

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