SELECT 包含联结点的查询 table
SELECT query including a junction table
我有三个table:
产品
- Product_ID
- 姓名
- 描述
- 价格
供应商
- Supplier_ID
- 姓名
- 位置
产品供应商
- Product_ID
- Supplier_ID
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
子句中使用 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'
);
这应该是最好的执行计划。
我有三个table:
产品
- Product_ID
- 姓名
- 描述
- 价格
供应商
- Supplier_ID
- 姓名
- 位置
产品供应商
- Product_ID
- Supplier_ID
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
子句中使用 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'
);
这应该是最好的执行计划。