我有一个名为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');
没有子查询可以吗?
答案 0 :(得分:1)
是的,通过双重加入INNER JOIN
表,如下所示
SELECT s.*
from student s
join student s1
on s.mark > s1.mark
and s1.name = 'B';
(或)使用WHERE EXISTS
之类的
SELECT * from student s
WHERE EXISTS (SELECT 1
FROM student
WHERE name = 'B'
AND s.mark > mark);
答案 1 :(得分:0)
您可以尝试使用存储过程将学生B的标记存储到变量中,然后在第一个查询的WHERE子句中使用该变量。
但是,我认为子查询是最好的方法。
为什么要避免使用子查询?