Запрос SELECT, включая таблицу соединений
У меня есть три таблицы:
Товар
- Код товара
- название
- Описание
- Цена
поставщик
- Supplier_ID
- название
- Место нахождения
ProductSupplier
- Код товара
- Supplier_ID
ProductSupplier
является соединительной таблицей, вместо того, чтобы иметь отношение многих ко многим.
Мне нужно создать SELECT
оператор, который будет возвращать два столбца: название и цену продукта (не идентификатор продукта), но только если Supplier
находится в Австралии. Местоположение поставщика не может отображаться в результате.
Я бы знал, как это сделать без соединительной таблицы, но это поставило меня в тупик.
2 ответа
Следующее заявление SQL вернет все продукты, по крайней мере, поставщик находится в Австралии
select distinct p.Name,p.Price
from Product p
inner join ProductSupplier ps on ps.Product_ID = p.Product_ID
inner join Supplier s on s.Supplier_ID = ps.Supplier_ID
where s.Location = 'Australia'
Если вы можете избежать select distinct
(а также count(distinct)
), то это хорошая идея. Они несут дополнительные накладные расходы на удаление дубликатов.
Таким образом, лучший подход будет делать фильтрацию в where
пункт, используя in
или же exists
:
select p.Name, p.Price
from Product p
where exists (select 1
from ProductSupplier ps inner join
Supplier s
on s.Supplier_ID = ps.Supplier_ID
where ps.Product_ID = p.Product_ID and s.Location = 'Australia'
);
Это должен иметь лучший план выполнения.