欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

一个关于having max的有关问题

更新时间: 2014-01-05 02:14:54 责任编辑: Author_N1

 

一个关于having max的问题
sql1:
SELECT a.* FROM td_send a,
(SELECT ID FROM td_send GROUP BY ID HAVING MAX(STEPNOW)=2) b 
WHERE a.ID=b.id;

sql2:
SELECT a.* FROM td_send a where STEPNOW=2;

以上两个SQL有什么不同吗?
--参考方法--
第一个是以ID为筛选列,第二个是以STEPNOW为筛选列,能一样么
WITH t AS 
(select 1 ID ,0 step from dual UNION 
select 1 ID ,1 step from dual UNION 
select 1 ID ,2 step from dual UNION 
select 2 ID ,0 step from dual UNION
select 2 ID ,1 step from dual  )
/*SELECT ID FROM t GROUP BY ID HAVING MAX(STEP)=2*/
/*SELECT a.* FROM t a where step=2;*/
SELECT a.* FROM t a,
(SELECT ID FROM t GROUP BY ID HAVING MAX(STEP)=2) b 
WHERE a.ID=b.id;

--参考方法--
引用:
sql1:
SELECT a.* FROM td_send a,
(SELECT ID FROM td_send GROUP BY ID HAVING MAX(STEPNOW)=2) b 
WHERE a.ID=b.id;

sql2:
SELECT a.* FROM td_send a where STEPNOW=2;

以上两个SQL有什么不同吗?


一样与否关键在于ID是不是唯一的(或主键)
如果ID是主键,那么结果完全一致
如果ID不是主键,结果会有不同

前一个sql的意思是:查询出同一ID中相应的STEPNOW最大值为2的所有记录
后一个sql的意思是:查出STEPNOW=2的所有记录
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:14:54
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7525/
本文WWW.DOC100.NET DOC100.NET版权所有。