sql, выбор условия использования из другой таблицы

#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'