SQL Left Join возвращает значение NULL

У меня есть база данных с таблицами schedule и таблицей teams (как видно на изображении ниже). Я пытаюсь использовать homeID и awayID внутри таблицы schedule, чтобы выполнить соединение с таблицей teams .... Проблема в том, что она возвращается. ЗНАЧЕНИЕ NULL

Макет БД

SQL Left Join возвращает значение NULL

Schedule Макет стола

SQL Left Join возвращает значение NULL

Компоновка стола teams

SQL Left Join возвращает значение NULL

Мой запрос

SELECT s.*,
  t1.teamId as homeId_teamId,
  t1.teamCode as homeId_teamCode,
  t1.teamName as homeId_teamName,
  t2.teamId as visitorId_teamId,
  t2.teamCode as visitorId_teamCode,
  t2.teamName as visitorId_teamName
FROM schedule s
  LEFT JOIN teams t1 ON s.homeId = t1.teamName
  LEFT JOIN teams t2 ON s.visitorId = t2.teamName
WHERE  gameID = '1';

Возвращенный результат

SQL Left Join возвращает значение NULL

Есть идеи, почему я получаю значение NULL для соединения? Что мне здесь не хватает? Любая помощь приветствуется.

Вы уверены, что хотите, чтобы homeИдентификатор и visitorИдентификатор были в teamИмя?

Tyler Roper 30.08.2018 04:23
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

id должны быть присоединены к id (не именам):

SELECT s.*,
      t1.teamId as homeId_teamId,
      t1.teamCode as homeId_teamCode,
      t1.teamName as homeId_teamName,
      t2.teamId as visitorId_teamId,
      t2.teamCode as visitorId_teamCode,
      t2.teamName as visitorId_teamName
FROM schedule s LEFT JOIN
     teams t1
     ON s.homeId = t1.teamId LEFT JOIN
     teams t2
     ON s.visitorId = t2.teamId
WHERE s.gameID = 1;

gameID - целое число, поэтому сравнение должно производиться с числом, а не строкой.

Замечу, что типы homeId и visitorId не соответствуют teams.teamId, но название предполагает, что это правильное условие. Если бы внешние ключи были правильно определены, то типы должны были бы совпадать.

Один из тех, где ты бьешься головой об стену и говоришь DOH! Я просто зря потратил час своей жизни. Большое спасибо! Будет, кроме случаев, когда истечет время

Timothy Coetzee 30.08.2018 04:25

Обратите внимание, что homeId - это varchar(20), а teamId - это int.

Alexander 30.08.2018 04:25

@Alexander: Да, БД была плохо спроектирована. Спасибо что подметил это. Раньше он содержал название команды до создания новой таблицы teams.

Timothy Coetzee 30.08.2018 04:26

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