Запрос SELECT, включая таблицу соединений - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть три таблицы:

Product

  • Product_ID
  • Имя
  • Описание
  • Цена

Поставщик

  • Supplier_ID
  • Имя
  • Местоположение

ProductSupplier

  • Product_ID
  • Supplier_ID

ProductSupplier - это таблица соединений вместо отношения «многие ко многим».

Мне нужно создать оператор SELECT, который будет возвращать два столбца: название и цену продукта (не идентификатор продукта), но только если Supplier находится в Австралии.Местоположение поставщика не может отображаться в результате.

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

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Если вы можете избежать select distinctcount(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'
             );

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

0 голосов
/ 16 сентября 2018

следующее заявление 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'
...