有个疑惑:sql语句:
select * from student
where Sdept in
(select Sdept from student
where Sname='liuchen');
我觉得可以这样写:
select * from student
where Sdept in
(select * from student
where Sname='liuchen');
但是,如此在mysql中执行失败。前一个查询是在后面in查询的基础之上的,那么where Sdept in后面是一个集合,where也同样可以通过Sdept找到结果啊,为什么括号里面的命令要细化到一个值呢?难道这只是sql的语法规则?
select * from student
where Sdept in
(select Sdept from student
where Sname='liuchen');
我觉得可以这样写:
select * from student
where Sdept in
(select * from student
where Sname='liuchen');
但是,如此在mysql中执行失败。前一个查询是在后面in查询的基础之上的,那么where Sdept in后面是一个集合,where也同样可以通过Sdept找到结果啊,为什么括号里面的命令要细化到一个值呢?难道这只是sql的语法规则?
where Sdept in
(select * from student
where Sname='liuchen');
但是,如此在mysql中执行失败。在(select * from student
where Sname='liuchen')中
只能有1个字段
where Sdept in
(select Sdept from student
where Sname='liuchen');这样的包含子查询的SQL在执行的时候,会先查询子查询的结果,得到一个列表。如
select * from student
where Sdept in
(1,2,3,4);
这样的。然后判断Sdept 的值是否在这列表内,如果是,再把查询字段组成结果集,提交出来。
比如 select * from student where Sname='liuchen 返回三个字段 姓名,学号,系别 你打算让Sdept 和那个比较呢? 这个是基本语法问题,没什么可以讨论的。 和小学语文教语法是没什么两样。