IT编程 > 数据库 > Mysql

mysql语句执行顺序是怎么样的,导致查询语句不同结果

81人参与2020-05-12

首先来看下下面sql语句写的有没有问题?

select jg.id as goodsid,jm.name,...
from jdy_merchant jm
left outer join jdy_express_template jet on jet.id = jg.freight
left outer join jdy_goods jg on jm.id = jg.store_id
where jg.id = 1

甭管有没有,运行一下见分晓:

 unknown column 'jg.freight' in 'on clause'

嗯哼? 问题来了,表里明明有这个字段为什么还会找不到这一列呢?

这里就要说一下sql查询语句的执行顺序问题了:

分析:

sql查询语句中的执行顺序为:

from : 从哪个表查询数据 必须关键字

on : 关联条件

join : 关联表

where : 过滤条件

group by : 将过滤后的数据进行分组

having : 将分组后的数据再次进行过滤

select :查询的列

order by : 将最终的查询结果进行排序

最后将查询的结果进行返回

接下来分析下上面的语句:

执行from 关联的表,这里有三个表,jdy_merchant jm,jdy_express_template jet,jdy_goods jg 

这三张表是按on指定的条件将left join后面的表附加到前面表之后的,

第一张表肯定没有问题,到left outer join jdy_express_template jet on jet.id = jg.freight这一句的时候就出现问题了

大家看一下关联条件 jet.id = jg.freight ,这时候前面还没有jdy_goods jg这张表,所以引用jg.freight就报错了

怎么改呢:

把关联表颠倒一下顺序就可以了,像这样:

select jg.id as goodsid,jm.name
from jdy_merchant jm
left outer join jdy_goods jg on jm.id = jg.store_id
left outer join jdy_express_template jet on jet.id = jg.freight
where jg.id = 1

执行结果:

原文:https://www.cnblogs.com/aigezi/p/12859015.html

留下您精彩的一笔!!点此进行留言回复

最近更新

Windows10下mysql 8.0.19 winx64安装教程及修改初始密码

06-23

在IDEA的maven项目中连接并使用MySQL8.0的方法教程

06-23

如何更改MySQL数据库的编码为utf8mb4

06-23

安装mysql-8.0.19-winx64遇到的问题:Can't create directory 'xxxx\Database\'

06-23

mysql中GROUP_CONCAT的使用方法实例分析

06-23

win10安装zip版MySQL8.0.19的教程详解

06-23

推荐阅读

mysql语句执行顺序是怎么样的,导致查询语句不同结果

05-12

MySQL索引扩展(Index Extensions)学习总结

09-13

MySQL优化之避免索引失效的方法

04-01

Mysql Innodb 锁机制

07-04

Mysql Update批量更新的几种方式

03-18

MySQL增删改查语句

08-26

数据库:MySQL实战;左链接;查询WordPress数据库中的文章内容

03-23

Mysql常用sql语句汇总

07-03

mysql 8.0.12 安装配置图文教程

09-23

MySQL基础知识1之MySQL数据类型

07-04

Linux云服务器学习之linux操作基础

07-02

MySQL笔记之系统信息函数详解

06-05

热门评论