我有这两个查询,它们最初是我想在连接上执行的子查询,但我不确定如何正确执行此操作。
我的小示例表如下所示
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 ...
我只是没有看到如果我加入这两个表,我如何仍然可以获得德国的国家然后查询该结果。
最佳答案
首先,在这种情况下,没有什么内在原因不能将其保留为子查询;实际上,我认为这使意图更加明显。
但是如果你想要一个自连接,它看起来是这样的(我使用 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'
关于sql - 如何使用连接而不是两个子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42260264/