请问sql大牛,我这个有点绕晕了,想不明白:
表数据是这样的:
id category_name type description
1 james 20 语文
2 curry 34 语文
3 curry 20 数学
4 james 30 数学
5 curry 30 英语
6 james 78 英语
sql:
SELECT category_name,description FROM category a WHERE TYPE>(
SELECT MIN(TYPE) FROM category b WHERE a.description=b.description
)
结果:
category_name description
curry 语文
james 数学
james 英语
为什么结果里显示第五条数据过滤掉了?
谁能给分析一下sql执行顺序?谢谢!
在表category中查询出category_name,description数据并且description的type最小值
--查询组合字段为(3)
SELECT category_name,description
---连表为(1)
FROM category a
---查询条件为(2)
WHERE TYPE>(
SELECT MIN(TYPE) FROM category b WHERE a.description=b.description
)
说明顺序为1-3
转自:http://blog.csdn.net/bitcarmanlee/article/details/51004767
TYPE>MIN(TYPE) 你自己去掉了最小分数
不是查的type大于子查询的吗,最开始查到1,3,5三条数据,然后大于这个的
你查询的数据是type的值大于description相同的数据中type的最小值,所以你的数据会将description相同的type值最小的数据去掉
a.description=b.description 第五条和第六条关联会产生多条数据:30 30 78 78 MIN(
TYPE) 以后选择30
然后再再这个基础上,进行第五,第六条的筛选:TYPE>30 ,结果就出来了。
望采纳
看语句的逻辑就是把科目名相同的,type值不是最小的记录列出来。 表中科目名相同的各两条,当然只保留type值大的那条记录,查询结果就是返回三条记录。没毛病呀,很清楚呢。
子查询就是查出同一科目,最小的Type值。