Какой тип соединения мне нужен? - PullRequest
1 голос
/ 14 октября 2011

У меня есть 2 таблицы, контракты и продавцы.Недавно я обнаружил некоторые ошибки в данных, в некоторых контрактах salesid не найден в 'salesmen', я подозреваю, что произошло случайное удаление или какая-то ошибка ввода.

Какое соединение я должен использовать, чтобы найти все контрактыкоторые не принадлежат продавцу, иными словами, contract.salesid не найден в столбце salesmen.id.

Это должно быть правильное внешнее соединение, но результаты не отображаются правильно.

Ответы [ 6 ]

4 голосов
/ 14 октября 2011

Звучит так, будто вы ищете "против присоединения". Explain Extended рассказывает о трех способах сделать это в MySQL:

  • левое соединение с WHERE __ IS NULL
  • Предложение NOT IN с подвыборкой.
  • A NOT EXISTS с подпунктом.
3 голосов
/ 14 октября 2011

Если вы ищете contract.salesid, которого нет в salesmen.id, вы можете использовать NOT IN() вместо объединения.

SELECT * FROM contracts WHERE salesid NOT IN (SELECT id FROM salesmen);

Вышеприведенное вернет все из contracts, имеющегоsalesid, который не соответствует ни одному существующему salesmen.id.Использование NOT IN () на больших таблицах может быть медленнее, чем с JOIN, но если ваши таблицы не слишком большие, обычно это более простой способ (на мой взгляд).

0 голосов
/ 14 октября 2011

Полагаю, это ответ:

select * from Contract c 
right outer join Salesmen s on (c.salesid = s.id)
0 голосов
/ 14 октября 2011

Внешнее соединение действительно может это сделать, но почему бы просто:

select *
from contract c
where c.salesid not in (select s.id
                        from salesmen s)
0 голосов
/ 14 октября 2011
SELECT c.contract_id FROM contract c
LEFT OUTER JOIN salesmen s ON s.salesman_id = c.salesman_id
WHERE c.salesman_id IS NULL

будет моим предположением.

0 голосов
/ 14 октября 2011

left outer join если вы переходите от контракта к продавцу

редактировать: неправильный путь заказа

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