Запрос 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'
             );

Это должен иметь лучший план выполнения.

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