有个疑惑: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的语法规则?

解决方案 »

  1.   

    select * from student
    where Sdept in  
    (select * from student
    where Sname='liuchen');
    但是,如此在mysql中执行失败。在(select * from student
    where Sname='liuchen')中
    只能有1个字段
      

  2.   

    select * from student
    where Sdept in
    (select Sdept from student
    where Sname='liuchen');这样的包含子查询的SQL在执行的时候,会先查询子查询的结果,得到一个列表。如
    select * from student
    where Sdept in
    (1,2,3,4);
    这样的。然后判断Sdept 的值是否在这列表内,如果是,再把查询字段组成结果集,提交出来。
      

  3.   


    比如 select * from student where Sname='liuchen 返回三个字段  姓名,学号,系别 你打算让Sdept 和那个比较呢? 这个是基本语法问题,没什么可以讨论的。 和小学语文教语法是没什么两样。