Sql 选择包含连接表的查询
我有三张桌子: 产品Sql 选择包含连接表的查询,sql,oracle,select,junction,Sql,Oracle,Select,Junction,我有三张桌子: 产品 产品标识 名字 描述 价格 供应商 供应商ID 名字 位置 产品供应商 产品标识 供应商ID ProductSupplier是连接表,而不是多对多关系 我需要创建一个SELECT语句,该语句将返回两列:产品的名称和价格(而不是产品ID),但前提是供应商位于澳大利亚。结果中无法显示供应商的位置 我知道在没有连接表的情况下如何执行此操作,但这让我感到困惑。下面的sql语句将返回所有产品,其中至少有位于澳大利亚的供应商 select distinct p.Name,p
- 产品标识
- 名字
- 描述
- 价格
- 供应商ID
- 名字
- 位置
- 产品标识
- 供应商ID
ProductSupplier
是连接表,而不是多对多关系
我需要创建一个SELECT
语句,该语句将返回两列:产品的名称和价格(而不是产品ID),但前提是供应商位于澳大利亚。结果中无法显示供应商的位置
我知道在没有连接表的情况下如何执行此操作,但这让我感到困惑。下面的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'
如果您可以避免选择distinct
(和计数(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'
);
这应该有最好的执行计划。似乎一个产品可以有很多供应商。您是在寻找至少有一家供应商不在澳大利亚的产品,还是寻找在澳大利亚根本没有供应商的产品?谢谢。我以前没有见过使用distinct,这段代码中使用distinct做什么?它返回的结果没有重复。我得到以下错误消息:在第2行:ORA-00933:SQL命令未正确结束时,从PRODUCT AS P*错误