Могу ли я объединить эти 2 оператора SQL? На данный момент выполняется 2 запроса. Пытаюсь немного подтянуться.
Первый:
SELECT * FROM (`cars`)
JOIN `brands` ON `brands`.`br_id` = `cars`.`brand_id`
WHERE `cars`.`id` = '185707'
Второй:
SELECT ROUND(AVG(rating)) as avg_rating
FROM car_ratings WHERE car_id = 185707
2 ответа
Вы можете сделать это с помощью group by
:
select cars.*,
brands.*,
round(avg(car_ratings.rating)) as avg_rating
from (cars
inner join brands on brands.br_id = cars.brand_id)
left join car_ratings on car_ratings.car_id = cars.id
where cars.id = 185707
group by cars.id
Обратите внимание, что это расширение MySQL для стандартного SQL; в стандартном SQL вам нужно будет перечислить все выбранные поля в предложении group by
.
select *
, (select round(avg(rating)) from car_ratings
where car_id = cars.id) as avg_rating
from cars join brands on brands.br_id = cars.brand_id
where cars.id = 185707
Но представляет ли это улучшение или нет - это другой вопрос, на который лучше всего ответить, посмотрев, какой план запроса используется.
Похожие вопросы
Связанные вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.