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

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

Проверьте это о соединениях SQL

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

Вот краткий стартер:

Внутреннее соединение требует, чтобы у вас были данные, удовлетворяющие критериям соединения. Если по какой-либо причине у вас нет записей в EMSData и csCIDPull с общим EmsID - никакие записи не будут возвращены вообще. В этом случае вам следует рассмотреть возможность использования внешнего соединения, если вы все еще хотите, чтобы записи из CustomerData возвращались независимо от соединения EMDData.

Другие вопросы по тегам