create table sc(
sno varchar(10),
cno varchar(10),
score float(3,1)
);
insert into sc values ('s001','c001',78.9);
insert into sc values ('s002','c001',80.9);
insert into sc values ('s003','c001',81.9);
insert into sc values ('s004','c001',60.9);
insert into sc values ('s001','c002',82.9);
insert into sc values ('s002','c002',72.9);
insert into sc values ('s003','c002',81.9);
insert into sc values ('s001','c003','59');
=================================sql 1 =============================================
SELECT s1.* FROM SC s1 WHERE (SELECT count(s2.score) FROM sc s2 where s1.cno = s2.cno AND s2.score >
= s1.score) <=2 ;
==================================sql 2============================================
SELECT s1.* FROM SC s1 WHERE (SELECT count(s2.score) FROM sc s2 where s1.cno = s2.cno AND s2.score > s1.score) <=2 ;
s002 c001 80.9
s002 c002 72.9
================================== 疑问 ============================================
把=号去掉了, 为什么会显示这两条数据? 我理解这条sql 是显示每条时把 外查询s1 的参数带子查询, 判断是否符合条件, 如果符合就显示.不符合就不显示. 这两条明显不符合where后的条件呀 ?
WHERE (SELECT count(s2.score) FROM sc s2 where s2.cno = 'c001' AND s2.score > '80.9') <=2 ;
WHERE (SELECT count(s2.score) FROM sc s2 where s2.cno = 'c002' AND s2.score > '72.9') <=2 ;