Несколько SQL-запросов с разными параметрами INNER JOIN?

Я не уверен, что это за терминология, но у меня есть запрос mysql

SELECT name, invTypes.typeName, character_skills.trained_skill_level FROM character_skills INNER JOIN character_infos ON character_infos.character_id = character_skills.character_id INNER JOIN invTypes ON character_skills.skill_id = invTypes.typeID WHERE character_skills.active_skill_level <5 AND skill_id = 12203 AND name = 'Mokey PYD';

Однако есть 2 переменные, которые меняются, и мне нужно показать все это в одной таблице.

Эти две переменные

WHERE character_skills.active_skill_level <5 AND skill_id = 12203

Например

Мне нужно увидеть, является ли значение active_skill_level is < 5 для skill_id 12203, НО нужно также проверить, если active_skill_level < 4 для skill_id 12204, и мне нужно, чтобы они отображались в той же таблице...

Может ли кто-нибудь помочь мне немного? Очень признателен.

Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
128
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Используйте UNION ALL

SELECT name, invTypes.typeName, character_skills.trained_skill_level 
FROM character_skills INNER JOIN character_infos ON character_infos.character_id = character_skills.character_id 
INNER JOIN invTypes ON character_skills.skill_id = invTypes.typeID 
WHERE character_skills.active_skill_level <5 AND skill_id = 12203 AND name = 'Mokey PYD'
union all
SELECT name, invTypes.typeName, character_skills.trained_skill_level 
FROM character_skills INNER JOIN character_infos ON character_infos.character_id = character_skills.character_id 
INNER JOIN invTypes ON character_skills.skill_id = invTypes.typeID 
WHERE character_skills.active_skill_level <4 AND skill_id = 12204 AND name = 'Mokey PYD'

Альтернативой союзу all является предложение ИЛИ.

SELECT name, invTypes.typeName
  , character_skills.trained_skill_level 
FROM character_skills 
INNER JOIN character_infos ON character_infos.character_id = character_skills.character_id 
INNER JOIN invTypes ON character_skills.skill_id = invTypes.typeID 
WHERE ( character_skills.active_skill_level <5 
AND skill_id = 12203  )  
OR  ( character_skills.active_skill_level <4 
AND skill_id = 12204  ) 
AND name = 'Mokey PYD';

это также может оптимизировать немного хуже, чем подход UNION ALL, в зависимости от индексов таблицы, все еще +1, поскольку ответ действителен. Я знаю, что оптимизатор базы данных Oracle будет оптимизировать и обрабатывать OR как UNION ALL в большинстве случаев, особенно если задействованы индексы... Как MySQL принадлежит корпорации Oracle, я надеюсь, что MySQL также получит эту оптимизацию в будущем.

Raymond Nijland 19.06.2019 15:32

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