SELECT distinct QUESTIONID  from kbox_base_relate_paperquestion  UNION  SELECT distinct QUESTIONID from kbox_base_relate_knowledgequestion UNION all SELECT distinct QUESTIONID from kbox_base_relate_courseassistquestion是正确的,但是在这个基础之上再加上select    questionID from   之后就出错了。。请问是为什么啊?select * from (SELECT distinct QUESTIONID  from kbox_base_relate_paperquestion  UNION  SELECT distinct QUESTIONID from kbox_base_relate_knowledgequestion UNION all SELECT distinct QUESTIONID from kbox_base_relate_courseassistquestion)   会  Every derived table must have its own alias的错误。请问是为什么啊?

解决方案 »

  1.   

    在 SQL 的最后再加个 xxx ,错误描述是需要一个别名,虽然楼主没有用到。
      

  2.   

    select T.QUESTIONID from 
    (
    SELECT distinct QUESTIONID  from kbox_base_relate_paperquestion  
    UNION all
    SELECT distinct QUESTIONID from kbox_base_relate_knowledgequestion 
    UNION all
    SELECT distinct QUESTIONID from kbox_base_relate_courseassistquestion
    ) AS T 
      

  3.   

    因为
    SELECT distinct QUESTIONID  from kbox_base_relate_paperquestion  UNION  
    SELECT distinct QUESTIONID from kbox_base_relate_knowledgequestion UNION all 
    SELECT distinct QUESTIONID from kbox_base_relate_courseassistquestion上面的查询语句是查出三张表中QUESTIONID  一列的值
    select * from 后面应该是一张表
    所以应该将以上语句封装成一张表
    例如:select * from 
    (
     SELECT distinct QUESTIONID  from kbox_base_relate_paperquestion  UNION  
     SELECT distinct QUESTIONID from kbox_base_relate_knowledgequestion UNION all 
     SELECT distinct QUESTIONID from kbox_base_relate_courseassistquestion
    ) A 
      

  4.   

    select * from (SELECT distinct QUESTIONID  from kbox_base_relate_paperquestion  UNION  SELECT distinct QUESTIONID from kbox_base_relate_knowledgequestion UNION all SELECT distinct QUESTIONID from kbox_base_relate_courseassistquestion)  as tableA
      

  5.   


    select * from (select 'a' from dual)  t
      

  6.   

    楼上的都是正解关键在最后加一个 as XXX,这表明,你的括号中间是一个表的结果集,XXX是你的表名,select * from 语法后面是要写表名即select * from tableName  如果只是(),面没有加 as XXX,相当于此()的结果集没有名字,没有名字的表是不存在的
      

  7.   

    可以使用内嵌零时表,将 union  的数据作为数据集,然后在查询这个数据集 select * from (select a from a union select b as a from b )a
      

  8.   

    楼上说的都对 ,可是 第一个 union  为啥不是 union all,故意还是漏写了?当然这个和你报的错没有关系,只是提醒一下