#sql #sql-server #join #cross-join
#sql #sql-сервер #Присоединиться #перекрестное объединение
Вопрос:
У меня есть следующие таблицы:
Автомобили:
id manufacturer
--------------------
1 Nissan
2 Toyota
3 Honda
4 Volkswagen
Тип:
id type car_id
--------------------------------------------
1 maxima 1
2 civic 3
3 accord 3
4 corolla 2
5 altima 1
Цвет:
id color car_id
———————————--------------------
1 yellow 1
2 blue 2
3 blue 1
4 black 4
5 red 1
требуемая таблица:
car_id total_type total_colors
————————————————---------------------------
1 2 3
2 1 1
3 2 0
4 0 1
Как я могу получить результирующую таблицу? Я бы предпочел не использовать предложение with . Будет ли a CROSS JOIN
оптимальным способом?
Ответ №1:
Кажется, это можно было бы сделать с помощью 2 ЛЕВЫХ объединений и ПОДСЧЕТА ОТДЕЛЬНЫХ агрегатных функций. Что-то вроде этого
select c.id, count(distinct t.id) total_type, count(distinct co.id) total_colors,
from cars c
left join [types] t on c.id=t.car_id
left join colors co on c.id=co.car_id
group by c.id
order by 1;