SELECT查询,包括联结表

时间:2018-09-16 04:12:40

标签: sql oracle select junction

我有三个表:

产品

  • 产品ID
  • 名称
  • 说明
  • 价格

供应商

  • Supplier_ID
  • 名称
  • 位置

ProductSupplier

  • 产品ID
  • Supplier_ID

ProductSupplier是联结表,而不是多对多关系。

我需要创建一个SELECT语句,该语句将返回两列:产品的名称和价格(不是产品ID),但前提是Supplier位于澳大利亚。供应商的位置无法显示在结果中。

我会在没有联结表的情况下知道如何执行此操作,但这让我很困惑。

2 个答案:

答案 0 :(得分:0)

如果您可以避免使用select distinct(和count(distinct)),那是个好主意。他们为删除重复项而产生了额外的开销。

因此,最好的方法是使用whereinexists子句中进行过滤:

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'
             );

这应该有最好的执行计划。

答案 1 :(得分:-1)

以下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'