当前位置: 首页 > news >正文

MySQL查询语句的通配符*

文章目录

  • 环境
  • 背景
  • 解决办法
  • 分析
  • 总结
  • 参考

环境

  • MySQL 8.0.28
  • MySQL Workbench 8.0

背景

我想查询一张表里的记录,由于表里的字段可能非常多,或者我也不确定表里包含了哪些字段,所以需要用 * 来通配所有字段。与此同时,我想要重点关注某一个或几个字段(这些字段名是已知的),因此,想要把这些字段放在查询结果的最前面。

例如:已知表 t1 和 字段 c1 ,想要查询该表的所有字段,并把 c1 放在最前面。

看下面的SQL语句:

select c1, * from t1

注:事实上 * 也包含了 c1 ,所以 c1 会在结果里出现两次,这是OK的,在生产环境里我们一般不会这么用,这里只是测试一下。

但是,该SQL语句在MySQL里运行报错:

mysql> select c1, * from t1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from t1' at line 1

在MySQL Workbench里也是一样报错:

在这里插入图片描述

注:在Db2里,这样写SQL是没问题的,可以正常运行。

解决办法

在MySQL的官方文档( https://dev.mysql.com/doc/refman/8.0/en/select.html )里提到:

Use of an unqualified * with other items in the select list may
produce a parse error. For example:

SELECT id, * FROM t1

To avoid this problem, use a qualified tbl_name.* reference:

SELECT id, t1.* FROM t1

可见,解决办法是写成:

SELECT id, t1.* FROM t1

也就是在 * 前面加上表名。

分析

官方文档给出了解决办法,但是并没有说明原因。

事实上,经过测试,我发现,在SQL语句里使用 * 时,貌似只有以下情况会报错:

  1. * 前面不带表名,而且
  2. * 左边还有其它的字段

只有这两个条件都满足,才会报错。如果只满足一个条件,或者两个条件都不满足,则不会报错。比如,下面的SQL语句都是OK的:

select * from t1; -- 不满足 2
select *, c1 from t1; -- 不满足 2
select c1, t1.* from t1; -- 不满足 1
select *, t1.* from t1; -- 第一个 * 不满足 2,第二个 * 不满足 1

总结

在MySQL的SQL语句里,要把 * 和字段名混用的话:

  • 要么把 * 前面带上表名,比如: select ..., t1.*, ... from ...
  • 要么把 * 放在最左边,比如: select *, ... from ...

看起来,把 * 前面带上表名是一个比较不错的方法。

参考

  • https://dev.mysql.com/doc/refman/8.0/en/select.html
http://www.lqws.cn/news/455131.html

相关文章:

  • Tkinter基础函数知识点整理
  • 人工分选终将淘汰?自动化如何重构电池制造品质红线?
  • haproxy 代理/负载均衡器学习二 配置文件介绍
  • Linux之线程同步与互斥
  • 【内存】Linux 内核优化实战 - vm.max_map_count
  • [Nginx] 配置中的sendfile参数详解:从传统 IO 到零拷贝的性能优化
  • torchmd-net开源程序是训练神经网络潜力
  • 从头搭建环境安装k8s遇到的问题
  • 宽带中频10.4G采集卡
  • Day37 早停策略和模型权重的保存
  • LeetCode 680.验证回文串 II
  • Python内存使用分析工具深度解析与实践指南(上篇)
  • GoogLeNet:图像分类神经网络的深度剖析与实践
  • chili3d笔记19 读取dxf
  • 大话软工笔记—功能的概要设计
  • 数据库part2---子查询
  • 常用绘图工具网站推荐合集:打造高效可视化表达力!
  • OPENPPP2 通用有栈协程架构探秘(C++ 高级编程指南)
  • 解决uni-app发布微信小程序主包大小限制为<2M的问题
  • 嵌入式学习笔记——day36-多路IO复用
  • 在PHP环境下使用SQL Server的方法
  • Ruoyi(若依)整合websocket实现信息推送功能(消息铃铛)
  • AS32A601与ASM1042芯片在电力系统自动化监控中的应用效能分析
  • tkinter Entry(输入框)组件学习指南
  • Linux/Armageddon
  • Sentinel 服务限流机制
  • 信息抽取数据集:多层次分类与深度分析综述
  • C#读取OPCUA节点数据
  • API 调试工具校验 JSON Mock 接口(一):无参请求与基础响应验证
  • Android 当apk是系统应用时,无法使用webView的解决方案