sql - 如何使用连接而不是两个子查询

标签 sql join subquery

我有这两个查询,它们最初是我想在连接上执行的子查询,但我不确定如何正确执行此操作。

我的小示例表如下所示

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/

相关文章:

mysql - 在 MySQL 中使用子查询

mysql - 根据最后一行过滤数据 mysql

MySQL 高效加入 "in"没有重复

mysql - SQL:查找商店的唯一客户时出现问题

ruby-on-rails - ruby如何简化split、iterate.each和join? -- ruby 初学者

linq-to-sql - Linq查询跨三级表生成sum

mysql 在一张表上进行多个分组

SQL - 选择所有行并将列值替换为带有标识符的最大列值

SQL Server : row present in one query, 在另一个中丢失

sql - Postgresql 选择第一个字母不是@或#的单词频率