Sql Outer Соединить повторяющиеся строки - PullRequest
1 голос
/ 21 октября 2011

У меня есть две две таблицы, к которым присоединяется следующий запрос.

SELECT     
   dbo.ORDERLINE.DDCVNB, 
   dbo.ORDERLINE.DDAFAB, 
   dbo.ORDERLINE.DDAITX, dbo.ORDERLINE.DDALDT, 
   dbo.ORDERLINE.DDDUVA, dbo.ORDERLINE.DDARQT, 
   dbo.ORDERSHIPH.DHCANB, dbo.ORDERSHIPH.DHGGNB, 
   dbo.ORDERLINE.DDAAGM, dbo.ORDERLINE.DDCHNB, 
   dbo.ORDERLINE.DDAAGQ
FROM         
    dbo.ORDERLINE 
LEFT OUTER JOIN
    dbo.ORDERSHIPH ON dbo.ORDERLINE.DDAFAB = dbo.ORDERSHIPH.DHAFAB AND dbo.ORDERLINE.DDCVNB = dbo.ORDERSHIPH.DHCVNB

Таблица ORDERLINE содержит 7 миллионов строк, а ORDERSHP имеет 2 миллиона строк.

Мой запроснабор результатов имеет 14 миллионов строк.

Как это возможно при левом внешнем соединении?Разве результирующий набор не должен быть равен числу строк в ORDERLINE, которое составляет 7 миллионов?

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

Возможно, вам не хватает других критериев соединения. Не зная всех полей в вашей базе данных, нам будет сложно помочь. Похоже, вам также нужны пустые записи из таблицы заказов. Если нет, то воспользуйтесь предложением Кори и используйте внутреннее соединение.

1 голос
/ 21 октября 2011

В вашем предложении ON нет достаточных критериев соединения, и для каждой левой строки совпадают 2 правые строки.По сути, это перекрестный продукт.

Кроме того, вы, возможно, даже не захотите ЛЕВОГО НАРУЖНОГО СОЕДИНЕНИЯЕсли вы знаете через RI или что-то подобное, по крайней мере, будет по крайней мере одна строка в правой таблице для каждой слева, вы должны использовать INNER JOIN.

0 голосов
/ 06 октября 2014

Я выяснил это нелегко для внешних объединений:

LEFT OUTER JOIN
dbo.ORDERSHIPH ON dbo.ORDERLINE.DDAFAB = dbo.ORDERSHIPH.DHAFAB AND dbo.ORDERLINE.DDCVNB = dbo.ORDERSHIPH.DHCVNB

Если в таблице ORDERSHIPH есть несколько записей с одинаковыми значениями DHAFAB и DHCVNB (скажем, два), тогда предложение select вернет набор строк для ОБРАТНЫХ ЗАПИСЕЙ В ORDERSHIPH. Что означает 7 миллионов раз два. Если ORDERSHIPH имеет, скажем, 3 записи с теми же значениями, вы получите взамен 3 набора данных.

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