我有三个表:
产品
供应商
ProductSupplier
ProductSupplier
是联结表,而不是多对多关系。
我需要创建一个SELECT
语句,该语句将返回两列:产品的名称和价格(不是产品ID),但前提是Supplier
位于澳大利亚。供应商的位置无法显示在结果中。
我会在没有联结表的情况下知道如何执行此操作,但这让我很困惑。
答案 0 :(得分:0)
如果您可以避免使用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'
);
这应该有最好的执行计划。
答案 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'