sql中的高手中的高手来看看这个SQL查询语句中的union错在哪儿了?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中的高手中的高手来看看这个SQL查询语句中的union错在哪儿了?相关的知识,希望对你有一定的参考价值。

已知:
学生表(学号,姓名,年级,专业,性别,年龄)主码:学号
课程表(课号,课名,教师,职称,课时,学分)主码:课号
必修课(课号,专业)主码:课号
成绩表(学号,课号,成绩) 主码:学号,课号
select distinct top 4 xs.学号,kc.课号,kc.课名,kc.教师,cj.成绩*0.7 as 期末分数
from 学生表 as xs,成绩表 as cj,课程表 as kc
where xs.学号=cj.学号 and cj.课号=kc.课号 and (cj.成绩*0.7>=42 or cj.成绩*0.7 between 56 and 63)and kc.教师 in('汪涵','赵中华','李玲','刘中','汪红')and kc.课名 like '_据%'
order by 期末分数 desc
union
select distinct 学生表.学号,课程表.课号,课名,教师,成绩*0.7 as 期末分数
from 成绩表 join 学生表 on 学生表.学号=成绩表.学号 join 课程表 on 成绩表.课号=课程表.课号
where 课程表.课号 in (select 课号 from 必修课 where 专业='计算机软件')
group by 学生表.学号,课程表.课号,课名,教师,成绩
having count(学生表.学号)<=4

参考技术A union操作属于集合运算,会将多个结果集合并。如果进行排序的话,必须将order by写在最后,而且只能按照第一个select语句的字段列表排序。 参考技术B union语句不能有Order 去掉你查询语句中的Order 就可以了追问

但是要求按照成绩排序怎么办呢?

追答

应该可以用子查询吧
比如:select * from (select A from A表 union select B from B表) as C order by a

追问

哇哇,这么复杂啊,貌似有点抽象,偶刚学SQL表示看不懂

追答

呵呵 没关系 只要有心学下去,就能成高手的

本回答被提问者采纳
参考技术C order by 期末分数 desc
union

union前面不能有Order
参考技术D union all
....少了ALL追问

加了all后还是不能通过啊?

追答

那你输出的列数和数据类型是否一致?

追问

本质上是一致的,这个应该没问题

第5个回答  2011-12-06 去掉order by 子句

delphi中adoquery的使用(delphi高手详细说一下)

在主窗口中用个adoconnection 链接数据库(sql2000) 其他窗口都用adoquery链接adoconnection
这样的话adoquery设置的时候active要改成ture,那么SQL中应该怎么写?比如我一个数据库有俩表(表一 表二) 一个界面有4个edit框要获取数据库中的值。第一个获取表一一共有多少量(count(*))
第二个获取表一中某列中的某个值,第三个获取表二中的某列中的某个值,第四个也获取表二中某列中的某个值(),这样的话需要几个adoquery,他们的sql语句应该怎么写? 谢了

用一个Query即可. 在窗体设置的时候不要将Active设置成true. 所有的代码都自己写,自己控制.

一:
Query.sql.text:='select count(*) from table1';
Query.open; // open 就相当于Active:=true;
Edit1.Text:=Query.fields[0].AsString;
Query.close; //查询完后关闭数据集,相当于 Active:=false;

二:
Query.sql.text:='select 某个字段 from Table1 where xxxxx';
Query.open;
Edit2.Text:=Query.fields[0].AsString;
Query.close;

三:
Query.sql.text:='select 某个字段 from Table2 where xxxxx';
Query.open;
Edit3.Text:=Query.fields[0].AsString;
Query.close;

四:
Query.sql.text:='select 某个字段 from Table2 where xxxxx';
Query.open;
Edit4.Text:=Query.fields[0].AsString;
Query.close;
参考技术A 一共需要两个adoquery:
第一个读取总数:select count(*) as count1 from table1
第二个 select a.field1,b.field2,c.field3 from table1 as a,table2 as b,table3 as c where a.xx=b.xx and a.xx=c.xx (三个表之间一定有关联的,否则太多了)

以上是关于sql中的高手中的高手来看看这个SQL查询语句中的union错在哪儿了?的主要内容,如果未能解决你的问题,请参考以下文章

请问高手:如何用SQL语句获得数据表中所有关键字段的名称?

数据库中的sql查询是啥意思?

请教高手,使用IDEA做项目时mapper.xml中的sql语句问题提示:no data sources are configured ...

麻烦高手看下下面这个sql语句,为啥groupby了后,还能接个having 呢?

SQL执行计划中的BUFFER SORT是啥意思呢,请高手指点

sql语句 分次(多次)获取不重复记录,请高手赐教!