MYSQL 子查询

原创 2015年11月21日 09:42:59
 MYSQL 子查询

mysql出现错误“ Every derived table must have its own alias”

 (2011-10-09 13:09:25)
标签: 

宋体

 

别名

 

嵌套查询

 

派生表

 

进行

 

杂谈

分类: 计算机

Every derived table must have its own alias

这句话的意思是说每个派生出来的表都必须有一个自己的别名

一般在多表查询时,会出现此错误。

因为,进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名

把MySQL语句改成:select count(*) from (select * from ……) as total;

问题就解决了,虽然只加了一个没有任何作用的别名total,但这个别名是必须的

 

 

select name1 name, java, jdbc, hibernate,total
  from (select sc1.name name1, sc1.mark java
   from student_course2 sc1
   where sc1.course='java') as a,
   (select sc2.name name2, sc2.mark jdbc
   from student_course2 sc2
   where sc2.course='jdbc') as b,
   (select sc3.name name3, sc3.mark hibernate
   from student_course2 sc3
   where sc3.course='hibernate') as c,
 (select sc4.name name4,sum(sc4.mark) total
 from student_course2 sc4 group by sc4.name) as d
  where name1=name2 and name2=name3 and name3=name4 order by total ASC;

 

结果正确:

+----------+------+------+-----------+-------+
| name     | java | jdbc | hibernate | total |
+----------+------+------+-----------+-------+
| wangwu   |   40 |   30 |        20 |    90 |
| lisi     |   70 |   60 |        50 |   180 |
| zhangsan |  100 |   90 |        80 |   270 |
+----------+------+------+-----------+-------+
3 rows in set (0.02 sec)



select   *   from
table1   
left   join   table2   on   条件1   
left   join   table3   on   条件2   
left   join   table4   on   条件3  
where   条件4

SELECT a.*,(@rownum:=@rownum+1AS forder
FROM mytable a,(SELECT @rownum:=0) b
ORDER BY ftype ASC,fnum ASC

MySQL IN子查询

近日通过《mysql技术内幕:SQL编程》学习mysql子查询,书中介绍了IN子查询存在的问题,并且提供了一些优化方法。我在此书的基础上进行了深入研究,总结几点。 MySql优化器对IN子查询优化时...
  • guangzixin
  • guangzixin
  • 2012年11月20日 17:18
  • 980

MySQL-子查询(嵌套)

了解子查询的最好方法就是看例子现在我们来看看orders表和orderitems表orders表 orderitems表 现在我想要查找所有订购物品id为TNT2的客户,怎么查? orderit...
  • PythonKidDz
  • PythonKidDz
  • 2017年02月17日 11:58
  • 2751

mysql查询语句select-子查询

1 子查询定义     在一个表表达中可以调用另一个表表达式,这个被调用的表表达式叫做子查询(subquery),我么也称作子选择(subselect)或内嵌选择(inner select)。子查询...
  • JesseYoung
  • JesseYoung
  • 2014年10月15日 11:41
  • 19190

Mysql 子查询效率优化

一、MySQL子查询的位置        当一个查询是另一个查询的子部分是,称之为子查询(查询语句中嵌套含有查询语句)。子查询也是使用频率比较高的一种查询类型。因此,优化子查询,对于整个系统的性...
  • wmq880204
  • wmq880204
  • 2016年10月11日 14:39
  • 4200

Mysql子查询、UNION操作

子查询: 1.WHERE型子查询 指把内层查询的结果作为外层查询结果的比较条件。 例如:我们查询一个货物id的最大的那一个值可以通过order by来查询,如: 那么,如果不能用order...
  • FreeeLinux
  • FreeeLinux
  • 2016年11月21日 23:16
  • 895

MySQL在字段中使用select子查询

前几天看别人的代码中看到在字段中使用select子查询的方法,第一次见这种写法,然后研究了一下,记录下来 大概的形式是这样的: select a .*,(select b.* from b where...
  • kankan231
  • kankan231
  • 2015年08月07日 12:53
  • 13777

IN+子查询(Mysql)

1.Mysql中的In+子查询 在写select语句的时候可能会遇见需要通过类似下面的select子查询来完成的功能: select * from table1 where id in (...
  • qq_28736639
  • qq_28736639
  • 2017年09月27日 19:41
  • 169

MySQL自学笔记4--where、from、exists型子查询

按照子查询的嵌入位置分为:where、from、exists型子查询,学习了这三种子查询的基本语法。...
  • qhxjtu
  • qhxjtu
  • 2017年01月25日 00:58
  • 351

MySQL实现子查询过滤多列

首先来看表结构1.person表2.job表 PS: 随意建的表。。不要在意细节 先看看匹配单个列select * from person where name in (select name f...
  • WIN2333
  • WIN2333
  • 2017年12月25日 20:00
  • 153

Mysql子查询用limit

执行带有Limit子查询是有问题的: SELECT * FROM task_and_device WHERE job_id IN (SELECT id FROM wx_devic...
  • zuozhiyoulaisam
  • zuozhiyoulaisam
  • 2016年12月08日 18:27
  • 2824
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL 子查询
举报原因:
原因补充:

(最多只允许输入30个字)