-
2021-01-25 22:17:13
select column1+10 as c1,c1+10 as c2 from table1;
想实现上面的效果,结果在mysql里面报错了,提示找不到c1这个列;
-- 不同的 数据库不一样
一般不支持在select中继续使用别名 或者where语句中使用
如果是在要用 可以尝试是否支持:
select column1+10 as c1,(select c1)+10 as c2 from table1;
但是在orderby groupby 可以使用
---一些解释参考
https://stackoverflow.com/questions/16715504/mysql-define-a-variable-within-select-and-use-it-within-the-same-select/16715618#16715618
https://stackoverflow.com/questions/6081436/how-to-use-alias-as-field-in-mysql
mysql中的SQL语句执行是有一定顺序的,如下:
1. from
2. on
3. join
4. where
5. group by
6. with
7. having
8. select
9. distinct
10. order by
11. limit
一条SQL会经过这11步的,中间的每一步都会生成一张虚拟表,后面的步骤都是在上一张虚拟表中进行筛选与查询的,下面假设,经过了7步也就是经过了having这一步,生成的虚拟表假设为:
id column1 column2 alias(having后的别名)
1 10 10 aaa
2 20 20 bbb
现在到了SELECT这一步的时候,你的查询字段为 column1+10 as c1, 那么sql解析器在这个虚拟表中可以找到column1这个字段,那么计算和设置别名成功, 现在你要c1+10,它发现这个虚拟表中不存在这个字段,那么就会报错,如果你想这样做:alias as xxx, 那么也不会报错,因为having筛选过后,这个别名字段已经在虚拟表中了,所以其实道理很简单,select的执行顺序是排在第8步的,而select是针对以上几步生成的虚拟表进行操作的,所以你所要使用的字段,如果虚拟表中不存在,那么则会报错,如果楼主的那句SQL硬要执行的话,也只能改成select column1+10 as c1,column1+10+10 as c2 from table1;
更多相关内容 -
MySQL 字段别名(列别名)
2021-01-18 18:14:43SQL 字段别名同本文前文讲述的表别名一样,SQL(MySQL) 也支持对表的字段(列)设置别名。字段别名语法:SELECT column AS column_alias FROM table字段别名使用例子字段别名一个明显的效果是可以自定义查询数据返回的...SQL 字段别名
同本文前文讲述的表别名一样,SQL(MySQL) 也支持对表的字段(列)设置别名。
字段别名语法:
SELECT column AS column_alias FROM table
字段别名使用例子
字段别名一个明显的效果是可以自定义查询数据返回的字段名。如下面的表数据:
user 用户表:
uid
username
password
email
regdate
1
admin
b7e591c246d010bb2ccd77d52490c85e
admin@5idev.com
1277992339
2
小明
a193686a53e4de85ee3f2ff0576adf01
xiao@163.com
1278063917
3
Jack
0193686a35e4de85ee3f2ff0567adf490
jack@gmail.com
1278061380
在查询的时候,对 username 字段使用别名:
SELECT username AS name,email FROM user
返回查询结果如下:
name
email
admin
admin@5idev.com
小明
xiao@163.com
Jack
jack@gmail.com
当然如此简单的定义字段的别名是没有太大实际意义的,字段别名更多的意义是解决字段名的重复,如一个表字段被查询两次或更多次时:
SELECT username AS name,username,email FROM user
或者两个及更多表进行查询,有相同的返回字段时:
article 文章表:
aid
title
content
uid
pubtime
1
文章1
文章1正文内容...
1
1278982219
2
文章2
文章2正文内容...
1
1278985319
3
文章3
文章3正文内容...
2
1279185319
user 用户表:
uid
username
title
password
email
regdate
1
admin
管理员
b7e591c246d010bb2ccd77d52490c85e
admin@5idev.com
1277992339
2
小明
观察者
a193686a53e4de85ee3f2ff0576adf01
xiao@163.com
1278063917
3
Jack
叫我老外
0193686a35e4de85ee3f2ff0567adf490
jack@gmail.com
1278061380
上面两个表都定义了 title 字段且都需要返回该字段数据时,就需要定义字段别名(至少定义一个):
SELECT a.title AS atitle,u.username,u.title AS utitle FROM article AS a, user AS u where a.uid=u.uid
返回查询结果如下:
atitle
username
utitle
文章1
admin
管理员
文章2
admin
管理员
文章3
小明
观察者
可以看出,当查询返回的字段名称相同时,可以通过定义别名来避免冲突,上面查询的例子同时定义了字段别名与表别名。
提示
通常,定义字段别名的 AS 关键字可以省略,即下面两句 SQL 效果一致:
SELECT username AS name FROM user
SELECT username name FROM user
但我们建议不要省略 AS 关键字。
别名(alias)是 SQL 的标准语法,几乎所有的数据库系统都支持。在处理一些复杂的查询时,可以合理的定义表和字段别名来使 SQL 语句看起来更加精简易读,也避免查询返回相同字段数据时的冲突。
-
MySQL中使用表别名与字段别名的基本教程
2020-09-10 05:18:05主要介绍了MySQL中使用表别名与字段别名的基本教程,利用SELECT语句和AS子句进行取别名的操作,需要的朋友可以参考下 -
MySQL中使用表别名与字段别名的基本教程_MySQL
2021-02-03 06:20:08MySQL 表别名(Alias)SQL 表别名在 SQL 语句中,可以为表名称及字段(列)名称指定别名(Alias),别名是 SQL 标准语法,几乎所有的数据库系统都支持。通过关键字 AS 来指定。表别名语法:SELECT column FROM table AS ...MySQL 表别名(Alias)SQL 表别名
在 SQL 语句中,可以为表名称及字段(列)名称指定别名(Alias),别名是 SQL 标准语法,几乎所有的数据库系统都支持。通过关键字 AS 来指定。
表别名语法:
SELECT column FROM table AS table_alias
上述 SQL 执行后的效果,给人感觉是对 table_alias 表进行查询,但实际上对单表做简单的别名查询通常是无意义的。一般是对一个表要当作多个表来操作,或者是对多个表进行操作时,才设置表别名。
表别名使用例子
下面是一个简单的多表操作的例子:
article 文章表:
user 用户表:
当查询一篇文章的时候,一般会同时将对应的文章作者查询出来,通常的 SQL 语句为:
SELECT article.title,article.content,user.username FROM article, user
WHERE article.aid=1 AND article.uid=user.uid
设置表别名后:
SELECT a.title,a.content,u.username FROM article AS a, user AS u where a.aid=1 and a.uid=u.uid
上述两条 SQL 语句查询结果是一样的:
可以看出,使用表别名查询,可以使 SQL 变得简洁而更易书写和阅读,尤其在 SQL 比较复杂的情况下。除了使用别名来简化 SQL 外,有些时候例如一个表做自身关联时,必须要使用别名来当作两个表进行关联操作。
MySQL 字段别名(列别名)SQL 字段别名
同本文前文讲述的表别名一样,SQL(MySQL) 也支持对表的字段(列)设置别名。
字段别名语法:
SELECT column AS column_alias FROM table
字段别名使用例子
字段别名一个明显的效果是可以自定义查询数据返回的字段名。如下面的表数据:
user 用户表:
在查询的时候,对 username 字段使用别名:
SELECT username AS name,email FROM user
返回查询结果如下:
当然如此简单的定义字段的别名是没有太大实际意义的,字段别名更多的意义是解决字段名的重复,如一个表字段被查询两次或更多次时:
SELECT username AS name,username,email FROM user
或者两个及更多表进行查询,有相同的返回字段时:
article 文章表:
user 用户表:
上面两个表都定义了 title 字段且都需要返回该字段数据时,就需要定义字段别名(至少定义一个):
SELECT a.title AS atitle,u.username,u.title AS utitle FROM article AS a, user AS u where a.uid=u.uid
返回查询结果如下:
可以看出,当查询返回的字段名称相同时,可以通过定义别名来避免冲突,上面查询的例子同时定义了字段别名与表别名。
提示
通常,定义字段别名的 AS 关键字可以省略,即下面两句 SQL 效果一致:
SELECT username AS name FROM user
SELECT username name FROM user
但我们建议不要省略 AS 关键字。
别名(alias)是 SQL 的标准语法,几乎所有的数据库系统都支持。在处理一些复杂的查询时,可以合理的定义表和字段别名来使 SQL 语句看起来更加精简易读,也避免查询返回相同字段数据时的冲突。
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网
-
怎样解决无法获取MYSQL字段别名问题
2016-11-30 19:10:11润乾V4 润乾报表 无法获取MYSQL字段别名有客户通过润乾报表连接mysql数据库,数据集语法使用了别名(例如select id as testid from test),但是在报表中无法通过别名获取值。
通过jdbc直连测试各版本jdbc驱动测试,程序如下,
<%
try
{
String driverName="com.mysql.jdbc.Driver";
String userName="root";
String userPasswd="";
String dbName="test";
String tableName="user";
String url="jdbc:mysql://localhost:3306/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn=DriverManager.getConnection(url);
String sql="select id as testid from num";
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
String colname= rsmd.getColumnName(1) ;
String colname1= rsmd.getColumnLabel(1) ;
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaa="+colname);
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaa="+colname1);
while(rs.next())
{
%>
<tr>
<td><%=rs.getInt("testid")%></td>
</tr>
<%
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>,
发现使用jdbc5.1.x系列驱动getColumnName获取的不是别名。
使用润乾报表连接mysql数据库时如果用到别名,可以通过使用5.0.x系列及以下驱动解决不能获取别名的问题。
附jdbc驱动与Mysql版本对应关系:
Connector/J 5.1 支持Mysql 4.1、Mysql 5.0、Mysql 5.1、Mysql 6.0 alpha这些版本。
Connector/J 5.0 支持MySQL 4.1、MySQL 5.0 servers、distributed transaction (XA)。
Connector/J 3.1 支持MySQL 4.1、MySQL 5.0 servers、MySQL 5.0 except distributed transaction (XA) support。
Connector/J 3.0 支持MySQL 3.x or MySQL 4.1。
-
MySQL查询函数---为表和字段取别名
2021-01-25 21:59:21(1)为表取别名(2)为字段取别名(1)为表取别名当表名字很长或者执行一些特殊查询时,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名代替原来的名称。为表取别名的基本语法格式为:表名 [as] ... -
MySQL中使用表别名与字段别名
2018-10-07 14:08:24MySQL 表别名(Alias) SQL 表别名 在 SQL 语句中,可以为表名称及字段(列)名称指定别名(Alias),别名是 SQL 标准语法,几乎所有的数据库系统都支持。通过关键字 AS 来指定。 表别名语法: SELECT column FROM ... -
【MySQL】2.3.2-MySQL如何给列(字段)起别名
2022-06-23 13:23:26MySQL列名太长,查询太麻烦怎么办?给列起一个简短的别名吧,本篇文章手把手地教你MySQL给列(字段)起别名的三种方式。希望对你有帮助~ -
MySQL ---- where后使用字段别名
2022-06-10 16:04:01MySQL 是不支持这种骚操作的 比如 哪我就是想用怎么办,那就用套娃来实现嘿嘿 -
MySQL Union合并查询数据及表别名、字段别名用法分析
2020-09-09 09:22:33主要介绍了MySQL Union合并查询数据及表别名、字段别名用法,结合实例形式较为详细的分析了mysql使用Union合并连接查询数据以及使用as实现表别名与字段别名操作,需要的朋友可以参考下 -
mysql数据库在查询的时候不能使用字段别名,字段别名只在显示的时候显示出来
2021-02-16 18:17:46mysql> select * from department; +------+-----------+--------------+-------------+ | d_id | d_name | function_ | address | +------+-----------+--------------+-------------+ | 1001 | 科研部 | 研发... -
mysql中计算字段与别名
2019-08-14 18:12:46计算字段 概念 经过计算的字段 来由 从数据库中直接取出来的数据总是不满足应用程序的要求 想一个字段包含原有数据库的多个字段 比如来自多个表 来自一个表的多个字段 全部转化为大写 总数、平均数… 为此... -
mysql别名的使用
2021-01-18 19:17:30在项目中遇到别名的问题,抽时间整理了一下在sql中,合理的使用别名可以让sql更容易写并且提高可读性。别名使用 as 来表示,可以分为表别名和列别名。别名应该是先定义后使用才对,所以首先要了解sql的执行顺序sql... -
MYSQL列别名无效问题解决
2021-01-19 05:33:27在项目开发中,发现在MYSQL中使用的别名没有办法被正常解析,即给字段取别名无效,通过crs.getMetaData().getColumnName()取的是字段原来的字段名。如:给name字段取了个别名为name2,最终返回的结果并不是别名name2... -
MySQL别名的使用
2021-02-08 03:56:43在查询时,可以为表和字段取一个...为表取别名代码如下:mysql> SELECT * FROM department d-> WHERE d.d_id=1001;+------+-----------+--------------+-------------+| d_id | d_name | function | address... -
MySQL中where、group by、having、order by后面能使用字段别名吗?
2021-06-08 15:16:25where后面是不能使用查询字段的别名的,而group by、having、order by后面可以使用字段的别名。 为什么呢? 这与sql语句执行的顺序是有关系的,当出现select 以及 where时,表明这是查询条件语句,那么先执行where... -
MySQL在where子句中使用列别名
2021-07-16 17:45:10I have a Mysql Query:SELECT created_at as date FROM tableSo I created an alias for the created_at column. Now I want to use this alias in my WHERE clause:SELECT created_at as date FROM table WHERE dat... -
mysql怎么添加别名
2021-01-19 14:08:25使用 MySQL 查询时,当表名很长或者执行一些特殊查询的时候,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名代替表原来的名称。为表取别名的基本语法格式为:[AS]其中各子句的含义如下::... -
MySQL笔记之别名的使用
2021-02-05 05:45:57这个别名可以代替其指定的表和字段为表取别名mysql> SELECT * FROM department d-> WHERE d.d_id=1001;+------+-----------+--------------+-------------+| d_id | d_name | function | address |+--... -
MySQl排序,别名
2021-11-01 22:49:59设置别名(alias——> as) 在 MySQL 查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者 多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性 ①语法 ... -
mysql合并查询结果及为表和字段取别名
2021-01-26 03:57:16试了一下类型一样的话,字段名不一样也是可以的 关键字as可以用来取别名 表名 [as] 表别名 mysql可以同时为多个表取别名,而且这些别名可以出现在很多不同位置 再取表别名是要注意不能与数据库中其他的表名冲突 也... -
如何使用MySQL列别名进行计算?
2021-01-19 08:50:18好的,你需要做的是在不同的别名下加入同一个表(wp_postmeta)两次,这样你就可以使用不同的’WHERE’条件.我没有你的桌子所以我无法测试这个,但这是你想要使用的方法:SELECT wp_posts.*,(`alias_1`.meta_value) AS `... -
MySQL中不允许使用列别名作为查询条件
2021-01-27 07:11:50在MySQL中有个特殊的规定,即不允许使用列别名作为查询条件。比如有下面一个表:selectID,title,concept,conceptLength,addUserId,modifyTimefrom collections_wisdom将SQL修改如下:selectID+1 asnewID,title,... -
MySQL字段的数据含有括号的3种处理
2021-09-09 17:30:48substring_index(substring_index(目标字段名,"(",1),’)’,-1) AS 去除括号及括号内的内容, REPLACE(REPLACE(目标字段名,’(’,’’),’)’,’’) AS 只是去掉括号, substring_index(substring_index(目标字段名,... -
Mysql Where 条件使用列别名
2021-01-19 09:55:23有时候我们对查询的结果进行了处理形成了新的列名,又想在查询条件中使用此列别名,但MySQL是不支持这样做的。为什么不支持呢?之所以MySQL中不允许使用列别名作为查询条件,据说是因为MySql中列的别名本来是返回...