[not] in/exists 與 帶TOP的子查詢
當子查詢中帶TOP時,有連線條件和無連線條件結果是不一樣的。
in和exists子句的結構也不一樣。
看例子。
[@more@]create table a(id int)
insert into a
select 1
union
select 2
union
select 3
union
select 4
union
select 5
create table b(id int)
insert into b
select 1
union
select 2
union
select 3
-- 1
select * from a
where id in(select top 2 id from b)
-- 2
select * from a
where id in(select top 2 id from b where b.id = a.id)
-- 3
select * from a
where exists(select top 2 id from b where b.id = a.id)
-- 4
select * from a
where exists(select 1 from (select top 2 id from b) c where c.id = a.id)
我們可以看出,1和4是正確的,3和4不是我盟想要的結果。
加上not也一樣:
-- 1
select * from a
where id not in(select top 2 id from b)
-- 2
select * from a
where id not in(select top 2 id from b where b.id = a.id)
-- 3
select * from a
where not exists(select top 2 id from b where b.id = a.id)
-- 4
select * from a
where not exists(select 1 from (select top 2 id from b) c where c.id = a.id)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-1012948/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- exists與in子查詢優化優化
- 子查詢中的IN與EXISTS的區別(轉)
- 在關聯子查詢中in與exists的區別
- 一個NOT EXISTS含有OR條件子查詢的優化優化
- mysql求交集:UNION ALL合併查詢,inner join內連線查詢,IN/EXISTS子查詢MySql
- elasticsearch之exists查詢Elasticsearch
- MySQL exists關聯子查詢SQL效能及其低下最佳化之等值子查詢轉換MySql
- 子查詢-表子查詢
- sql語法相關子查詢與非相關子查詢SQL
- SQL查詢的:子查詢和多表查詢SQL
- NOT IN、NOT EXISTS的相關子查詢改用LEFT JOIN--sql2000效能優化SQL優化
- 子查詢與join效能差異
- mysql的子查詢MySql
- 複雜查詢—子查詢
- 子查詢中all與any的區別
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- TOP N 查詢 SQLSQL
- 相關子查詢&非相關子查詢概念
- 子查詢的典型例子
- MySQL子查詢MySql
- 子串查詢
- 使用子查詢
- MYsql 子查詢MySql
- oracle子查詢Oracle
- 查詢子串
- 子查詢分解
- 11子查詢
- sql子查詢SQL
- informix子查詢ORM
- CBO的查詢轉換(謂詞推入與子查詢展開(Subquery Unnesting))
- MySQL聯結查詢和子查詢MySql
- select查詢之三:子查詢
- Oracle [not] exists 子查詢裡不存在與外層關聯的條件,最終結果有無資料的現象Oracle
- MySQL第六篇:索引與子查詢MySql索引
- SQL入門之4 group by 與子查詢SQL
- in子查詢與表連線是否等價?
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 區分關聯子查詢和非關聯子查詢