У меня есть база данных с таблицами schedule и таблицей teams (как видно на изображении ниже). Я пытаюсь использовать homeID и awayID внутри таблицы schedule, чтобы выполнить соединение с таблицей teams .... Проблема в том, что она возвращается. ЗНАЧЕНИЕ NULL
Макет БД
Schedule Макет стола
Компоновка стола teams
Мой запрос
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';
Возвращенный результат
Есть идеи, почему я получаю значение NULL для соединения? Что мне здесь не хватает? Любая помощь приветствуется.






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! Я просто зря потратил час своей жизни. Большое спасибо! Будет, кроме случаев, когда истечет время
Обратите внимание, что homeId - это varchar(20), а teamId - это int.
@Alexander: Да, БД была плохо спроектирована. Спасибо что подметил это. Раньше он содержал название команды до создания новой таблицы teams.
Вы уверены, что хотите, чтобы homeИдентификатор и visitorИдентификатор были в teamИмя?