java中sql如何嵌套查找_带有NOT EXISTS的嵌套SQL查询

如果将它们分解为逻辑“块”,我会发现这些类型的查询更容易 .

您需要的第一件事是找到所有意大利机场

Select * from #Airports Where Country = 'Italy'

您需要做的第二件事是找到从抵达机场不是意大利的每个机场出发的所有航班 .

Select *

from #Flights

Inner Join #Airports on #Flights.Arriving = #Airports.Name

And #Airports.Country <> 'Italy'

现在你需要做相反的事情,找到从出发机场不是意大利的每个机场抵达的所有航班 .

Select *

from #Flights

Inner Join #Airports on #Flights.Departing= #Airports.Name

And #Airports.Country <> 'Italy'

此时,您需要满足要求的3个语句,但必须将它们放在一个语句中 . 您将从第一个声明开始,因为这是您想要返回给用户的内容(机场列表) . 然后,您将使用不存在的子查询添加下两个语句作为子查询 .

Select *

From #Airports A

Where Country = 'Italy'

And Not Exists (

Select 1

From #Flights F

Inner Join #Airports ASub on F.Arriving = ASub.Name

Where A.Name = F.Departing

And ASub.Country <> 'Italy'

)

AND Not Exists (

Select 1

From #Flights F

Inner Join #Airports ASub on F.Departing = ASub.Name

Where A.Name = F.Arriving

And ASub.Country <> 'Italy'

)

您应该注意到两个Not Exists语句的一些小调整 . 主要是,我把#Airports表别名,我在where子句中添加了一个条件 . #Airports的别名是由于我在“外部”语句中选择#Airports以及“内部”(子查询)语句 . 如果我不这样做,它会让两者混淆,不知道使用哪个引用 . 我做的最后一件事是我将两个Not Exists绑回主查询 . 这称为关联,这只是一种方法,可以确保当您从#Flights中选择时,您只需为您选择的机场(意大利机场)提供航班

Exists和Not Exists语句的主要好处之一是它通常允许您从语句中删除distinct关键字 . 返回大量数据时,不同可能导致极端性能命中 . 它还可以使查询更容易阅读 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值