#sql
#sql
Вопрос:
У меня четыре стола,
game(game_id, game_name, date_of_release), category(game_id, game_category), company(company_id, company_name), belongs_to(game_id, company_id)
Мне нужно выбрать идентификатор игры, имя игры и язык игры, где компания «Konami», я попытался сделать это так
SELECT a.game_id, a.game_name, b.game_category, FROM game a INNER JOIN category b ON a.game_id = b.game_id INNER JOIN company c ON company_name = 'Konami' INNER JOIN belongs_to d ON c.company_id = d.company_id
но он выбирает все игры, независимо от названия компании. Так что же пошло не так?
Ответ №1:
Ваше присоединение неверно.
SELECT ... FROM game a INNER JOIN category b ON b.game_id = a.game_id INNER JOIN belongs_to d ON d.game_id = a.game_id INNER JOIN company c ON c.company_id = d.company_id WHERE c.company_name = 'Konami'
Комментарии:
1. Обратите внимание, что в этом запросе значение параметра belongs_to ограничено значением идентификатора.game_id, а для этой компании-значением идентификатора компании belongs_to. В своем запросе вы в основном объединяли таблицы игр и категорий с таблицей компаний, а это не то, что вы хотите.
Ответ №2:
Похоже, вы не совсем понимаете, что происходит. Вы должны использовать их для подключения таблиц, в вашем случае
INNER JOIN company c ON company_name = 'Konami'
Вы подключили строку с информацией о Konami ко всем строкам в предыдущих таблицах. Старайтесь думать только о том, как вы соединяете таблицы, а не о том, как вы их фильтруете при написании предложения join
Итак, вы можете исправить это следующим образом: просто добавьте условие, которое показывает, как подключать таблицы
SELECT a.game_id, a.game_name, b.game_category FROM game a INNER JOIN category b ON a.game_id = b.game_id INNER JOIN belongs_to d ON a.game_id = d.game_id INNER JOIN company c ON c.company_id = d.company_id WHERE company_name = 'Konami'
Лучше фильтровать в предложении where, но это тоже будет работать нормально
SELECT a.game_id, a.game_name, b.game_category FROM game a INNER JOIN category b ON a.game_id = b.game_id INNER JOIN belongs_to d ON a.game_id = d.game_id INNER JOIN company c ON c.company_id = d.company_id AND company_name = 'Konami'