SQL INNER JOIN несколько таблиц не работает должным образом
Я пытаюсь лучше понять JOIN или INNER JOIN несколько таблиц в базе данных SQL.
Вот что у меня есть:
SQL-запрос:
SELECT *
FROM csCIDPull
INNER JOIN CustomerData ON CustomerData.CustomerID = csCIDPull.CustomerID
INNER JOIN EMSData ON EMSData.EmsID = csCIDPull.EmsID
;
Это не возвращает результатов, если я удаляю INNER JOIN EMSData
раздел, он предоставляет информацию от CustomerData
а также csCIDPull
столы. Мой метод мышления может быть неверным. У меня есть, скажем, 5 таблиц, все с int ID, эти идентификаторы также передаются в одну таблицу для объединения всех таблиц (таблица MAIN содержит только идентификаторы, в то время как другие таблицы содержат данные).
Думаю, я пристрелю вас, публикуя сообщения, чтобы понять, что я могу делать не так. -Спасибо
3 ответа
По сути это звучит так, как будто у вас нет соответствующих данных в вашей таблице EMSData. Вам нужно будет использовать OUTER JOIN
за это:
SELECT *
FROM csusaCIDPull
LEFT JOIN CustomerData ON CustomerData.CustomerID = csCIDPull.CustomerID
LEFT JOIN EMSData ON EMSData.EmsID = csCIDPull.EmsID
Визуальное объяснение соединений SQL
Примечание: не возвращайтесь *
но лучше выберите поля, которые вы хотите из каждой таблицы.
Слишком много, чтобы покрыть внешнее соединение против внутреннего соединения в этом ответе, но я бы начал с изучения различий между ними:
Вот краткий стартер:
Внутреннее соединение требует, чтобы у вас были данные, удовлетворяющие критериям соединения. Если по какой-либо причине у вас нет записей в EMSData и csCIDPull с общим EmsID - никакие записи не будут возвращены вообще. В этом случае вам следует рассмотреть возможность использования внешнего соединения, если вы все еще хотите, чтобы записи из CustomerData возвращались независимо от соединения EMDData.