34,594
社区成员
发帖
与我相关
我的任务
分享
SELECT * FROM (SELECT * FROM TB WHERE status<>'Y')AS T WHERE NOT EXISTS(SELECT 1 FROM (SELECT * FROM TB WHERE status<>'Y')AS T1 WHERE T.numType=T1.numType AND T1.ID>T.ID)
select * from tb a
where not exists
(
select 1 from tb where numType=a.numType
and NUMTYPE=a.NUMTYPE
and STATUS<>'Y'
)
a.STATUS<>'Y'
--验证鸭子的正确性
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-08-17 16:55:04
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([num] int,[numType] varchar(1),[status] varchar(1))
insert [tb]
select 2,'a','y' union all
select 3,'a','n' union all
select 6,'a','n' union all
select 1,'b','y' union all
select 5,'b','n' union all
select 2,'b','n' union all
select 4,'c','n' union all
select 3,'c','n' union all
select 5,'c','n'
--------------开始查询--------------------------
SELECT * FROM TB T1
WHERE NOT EXISTS(
SELECT 1 FROM TB T2 WHERE T2.STATUS<>'Y' AND T2.NUM<T1.NUM AND T2.NUMTYPE=T1.NUMTYPE
) AND T1.STATUS<>'Y'
----------------结果----------------------------
/*num numType status
----------- ------- ------
3 a n
2 b n
3 c n
(所影响的行数为 3 行)
*/
SELECT * FROM TB T WHERE NOT EXISTS(SELECT 1 FROM TB WHERE T.numType=numType AND ID>T.ID AND status<>'Y')AND status<>'Y'
select *
from tb k
where not exists(select * from tb where k.numType=numType and k.id>ID and status<>'Y')
and status<>'Y'
SELECT * FROM TB T1
WHERE NOT EXISTS(
SELECT 1 FROM TB T2 WHERE T2.STATUS<>'Y' AND T2.NUM<T1.NUM AND T2.NUMTYPE=T1.NUMTYPE
) AND T1.STATUS<>'Y'