我有两个查询,这些查询原本是我想要在连接上执行的子查询,但我不确定如何正确执行此操作。
我的小示例表看起来像这样
SupplierId|CompanyName|Country
这些字段是必填字段,因此可以将它们全部加入。我的原始子查询看起来像这样
select *
from Suppliers
where CompanyName != 'Nord-Ost-Fisch Handelsgesellschaft mbH'and Country =
(Select country
from Suppliers
where CompanyName = 'Nord-Ost-Fisch Handelsgesellschaft mbH');
我的查询的第一部分是查找属于公司名称的国家/地区并返回Germay
Select Country
From Suppliers
Where CompanyName = 'Nord-Ost-Fisch Handelsgesellschaft mbH'
我的查询的第二部分找到与上述查询相关的所有供应商。 Where Country = 'Germany'
不应该被硬编码。
Select *
From Suppliers
Where Country = 'Germany' -- this based on above statement
and CompanyName != 'Nord-Ost-Fisch Handelsgesellschaft mbH'
我正在尝试的查询看起来像这样
Select *
From Suppliers s join Suppliers ss
on s.SupplierID = ss.SupplierID
Where ...
我只是没有看到如果我加入这两个表格,我如何仍然可以获得德国的国家,然后查询该结果。
答案 0 :(得分:2)
首先,在这种情况下,没有固有的原因可以让你不能保留子查询;我实际上认为它使意图更加明显。
但是如果你想要一个自我加入,那么它的外观就是这样(我使用s
表将返回实际的供应商信息,而c
表示简单的表按国家过滤):
select s.*
from Suppliers s
inner join Suppliers c
ON s.Country = c.Country
WHERE c.CompanyName = 'Nord-Ost-Fisch Handelsgesellschaft mbH'
AND s.CompanyName <> 'Nord-Ost-Fisch Handelsgesellschaft mbH'
具体说明您要过滤的表字段。
或者,如果您愿意,可以将过滤器放在c上作为连接的一部分:
select s.*
from Suppliers s
inner join Suppliers c
ON s.Country = c.Country
AND c.CompanyName = 'Nord-Ost-Fisch Handelsgesellschaft mbH'
WHERE s.CompanyName <> 'Nord-Ost-Fisch Handelsgesellschaft mbH'