SELECT 包含联结点的查询 table

SELECT query including a junction table

我有三个table:

产品

供应商

产品供应商

ProductSupplier 是联结点 table 而不是多对多关系。

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

如果没有联结点 table,我会知道如何做到这一点,但这让我很困惑。

以下sql声明将return所有产品至少有位于澳大利亚的供应商

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 子句中使用 inexists:

进行过滤
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'
             );

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