2016-12-18 48 views
0

我有名为students的表,如下所示。如何获得所有标记大于特定学生的学生

id name mark 
1 A 10 
2 B 20 
3 C 30 
4 D 40 

现在,我如何获得所有标记大于学生姓名'B'的学生。我可以做以下查询。

SELECT * from student WHERE mark > (SELECT mark FROM student WHERE name = 'B'); 

是否有可能没有子查询?

回答

1

是的,它是一个INNER JOIN双连接表像下面

SELECT s.* 
from student s 
join student s1 
on s.mark > s1.mark 
and s1.name = 'B'; 

(OR)使用WHERE EXISTS

SELECT * from student s 
WHERE EXISTS (SELECT 1 
       FROM student 
       WHERE name = 'B' 
       AND s.mark > mark); 
0

您可以尝试使用存储过程将学生B的标记存储到变量中,然后在第一个查询的WHERE子句中使用该变量。

但是,我认为子查询将是最好的方法。

为什么要避免使用子查询?

+0

为什么你需要这个存储过程? – Rahul

+0

你不需要一个,但这只是使用子查询的替代方法。我认为使用子查询更好。此外,您使用连接的答案是我没有考虑的。 – bbrumm

相关问题