关于mysql 嵌套查询语句的使用

一、在Navicat中调试嵌套查询语句时总是报错,自己没有理解哪些地方要加括号,哪些地方要使用别名,总是报有语法错误,但是不知所云具体原因

只有这个知道其意义:

MySql 1248 - Every derived table must have its own alias

 

二、查询资料

一个查询中嵌套另一个查询,称为子查询

  1、子查询必须放在小括号里

  2、子查询可以出现在任意的位置。如(select,from,where,having等)

  

  语法:

    select(子查询)

    from(子查询) 别名

    where(子查询)

    group by

    having(子查询)

    例:

      查询工资比7566高的雇员工资

      select * from emp where sal>(select sal form emp where empno = 7566);

 

    总结

      1、一般来说,多表连接查询都可以使用子查询替代,但有的子查询不能使用多表查询替代

      2、子查询特点:灵活,方便,一般常作为增,删,该,查操作条件,适合于操作一个表数据

      3、多表连接查询更适合于查看夺标中数据

 

 

select FAULT_ID, FAULT_NAME, DEVICE_NAME, FAULT_INFO, orderCondition

FROM

(

SELECT * FROM

(select id AS FAULT_ID, device_id, name AS FAULT_NAME, info AS FAULT_INFO from fdp_fault) as A

LEFT JOIN

(

SELECT * FROM

(select diagnose_faultid , count(diagnose_faultid) as orderCondition from FDP_TASK group by diagnose_faultid) AS B

)

AS C

ON A.FAULT_ID=C.diagnose_faultid

 

LEFT JOIN

(SELECT id, NAME as DEVICE_NAME FROM fdp_device) as D

ON A.device_id=D.id

 

ORDER BY orderCondition DESC

) AS E

 

 

如上使用了嵌套查询 和 多表连接。

 

另外在使用模糊查询是,使用concat进行字符串连接处理,当传入字符串为空时,效果如 like '%%' 即查询所有信息

<select id="pageSelectByFaultName" parameterType="string" resultMap="FaultResultMap">

select A.ID AS FAULT_ID, A.NAME AS FAULT_NAME, B.NAME AS DEVICE_NAME, A.INFO AS FAULT_INFO

from

(select id, device_id, name, info from fdp_fault where name like

concat(concat("%",#{faultName}),"%")

or

info like

concat(concat("%",#{faultName}),"%")

)

as A

JOIN fdp_device B

ON A.DEVICE_ID=B.ID

</select>

 

路漫漫....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值