2014-09-30 2 views
0

Я написал основное левое внешнее соединение на столе «Мышь на стол». Чтобы убедиться, что я получаю нужный набор и количество данных, я провел внутреннее соединение Mouse and Pad и добавил счет внутреннего соединения (звезда) к счету внешнего внешнего соединения (звезда), который больше, чем count (*) столовые мыши на 12.Графы полного внешнего левого соединения и внутреннего соединения не складываются для подсчета (*) таблицы.

Вот левые внешнее соединение:

select * 
from mouse.crm_mmbi_contacts mouse 
left outer join pad.lean_contact pad 
on mouse.email_address = pad.email_addr 
where pad.email_addr IS NULL 
order by email_address 

а вот внутреннее соединение:

select * 
from mouse.crm_mmbi_contacts mouse 
inner join pad.lean_contact pad 
on mouse.email_address = pad.email_addr 
order by email_address 

Я побежал левые внешнее соединение без оговорки where и результата набор был в основном всей таблицей, плюс дополнительные 12 строк. Кроме того, существует только одна строка, где адрес email_address равен NULL.

Что я должен фильтровать или редактировать?

ответ

2

Если вы получаете больше результатов от Left Join, чем у вас в Mouse таблице, то это говорит о том, что ваш pad таблица имеет много: 1 отношение к вашей mouse таблице. Если вы ожидаете 1: 1, то проверьте наличие дубликата email_Addr в таблице pad.

Вы также отмечаете, что в своем запросе inner join вы видите меньше записей, чем в своем запросе left join. Это говорит о том, что у вас нет email_addr значений в вашей таблице pad, которые есть в вашей таблице mouse. Если вы ожидаете, что mouse LEFT JOIN pad вернет такое же количество записей, как mouse INNER JOIN pad, тогда застраховать, чтобы каждый email_address в mouse существует в pad.

Например:

mouse.email_address имеет следующие значения: 1,2,3,4,5,7

и

pad.email_addr имеет следующие значения: 1,2,2,4 , 6,6

SELECT mouse.email_address FROM mouse LEFT JOIN pad on email_address = email_addr Тогда даст: 1,2,2,3,4,5,7 (счетчик 7 строк)

Select mouse.email_Address from mouse INNER JOIN pad on email_address = email_Addr даст: 1,2,2,4 (счет 4 записи)

+0

Вы правы в своем первом абзаце о взаимосвязи между двумя таблицами. Тем не менее, я ничего не могу сделать о таблице «pad», содержащей повторяющиеся записи. Я проверил дубликаты в таблице «pad», и их много. Гораздо больше, чем разница в 12, я видел в подсчетах. Что касается 2-го абзаца, я не был очень ясен в своем первоначальном описании. Поэтому я не ожидаю, что 'inner join' выведет те же самые # записи, что и' left join'. Я действительно ожидаю, что 2 объединения будут добавлены вместе, чтобы быть равными счету (*) 'mouse' – simplycoding

+0

. Ваше' left join' без оператора 'WHERE' должно быть ровно столько же записей, сколько и в' Mouse'. Такова природа «Левого объединения». Кроме того, если у вас есть дубликат 'email_addr' в вашей таблице пэдов, то итогом в вашем' left join' будет количество записей в вашей таблице 'mouse', а также количество дубликатов в вашей таблице« pad », где дубликат содержит 'email_addr', который также находится в' mouse'. Если дубликат в 'pad' не имеет соответствующего' email_address' в мышке, тогда он не войдет в ваш 'left join', возможно, объяснив, почему вы получаете только 12 дополнительных записей. – JNevill

+0

Вы уверены, что последнее предложение в вашем комментарии верное?Потому что, не так ли? Как и в случае, если дубликат в 'mouse' не имеет соответствующего' email_address' в 'pad', то он не будет появляться в' left join', объясняя, почему я получаю только 12 дополнительных записей. – simplycoding

Смежные вопросы