昨天,遇到了一个sql异常错误信息:java.sql.SQLException: The used SELECT statements have a different number of columns,sql我自己随意写了一个,大概是这样子:

SELECTS.s1 AS n1,S.s2 AS n2,Y.y2 AS n3,S.s3 AS n4
FROMS
INNER JOIN Y ON S.s1 = Y.y1
WHERES.s4 = 'student'
UNION ALLSELECTS.s1 AS n1,S.s2 AS n2,Z.z2 AS n3,S.s3 AS n4FROMSINNER JOIN Z ON S.s1 = Z.z1WHERES.s4 = 'teacher'ORDER BYn1 DESC;

其中UNION ALL所select的4个列类型都是一样的,而且列数都是4,只不过所查询的列中,Y表的y2和Z表的z2所查询的条件不同,但都是和S表关联起来的,不知道为何,本地跑起来没问题,断点调试进去把sql扒出来一查也是没问题,并且把sql搞到测试数据库也没问题,但是在后台显示的时候就会报上述的那种sql异常错误,后来去查了一下网上报这种错误的,都说是列数不一致或者是有某一列类型不一样,我看了一下,基本没问题啊。

最后,去查询了一下UNION 和 UNION ALL的差别,下面摘自网上:

UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。

我要实现的功能可以包含重复的数据,所以就用UNION ALL,但还需要对查询出来的结果进行排序,但下面说对排序的处理,UNION ALL只是简单的将两个结果合并后就返回。所以就怀疑是不是后面那个ORDER BY n1 DESC导致的问题,所以改了一下SQL,改了之后如下:

SELECT * FROM (SELECTS.s1 AS n1,S.s2 AS n2,Y.y2 AS n3,S.s3 AS n4
FROMS
INNER JOIN Y ON S.s1 = Y.y1
WHERES.s4 = 'student'
UNION ALLSELECTS.s1 AS n1,S.s2 AS n2,Z.z2 AS n3,S.s3 AS n4FROMSINNER JOIN Z ON S.s1 = Z.z1WHERES.s4 = 'teacher') tORDER BYt.n1 DESC;

把UNION ALL所查出来的数据作为一个临时表t,然后再通过查出来的t.n1来排序,最后没问题了,但是效率估计不太好。

不清楚是不是MYSQL版本或者敏感问题导致,以上内容仅供参考,谢谢!

The used SELECT statements have a different number of columns 错误解决相关推荐

  1. 1222 - The used SELECT statements have a different number of columns

    使用MySQL的union all 或者onion查询时报如下错误: 1222 - The used SELECT statements have a different number of colu ...

  2. sql语句遇到错误: The used SELECT statements have a different number of columns :

    这是因为使用union的两个SQL语句产生的记录的表结构不一致. 必须是结构完全一致的记录集合才可以使用UNION. 以上就是两个表的字段不一样,导致,所以大家可以检查下. 转载于:https://w ...

  3. ERROR 1222 (21000): The used SELECT statements have a different number of columns :

    转自:https://blog.csdn.net/linshichen/article/details/52484224 转载于:https://www.cnblogs.com/sharpest/p/ ...

  4. MySQL导出到excle显示不了_mysql导出select语句结果到excel文件遇到问题及解决方法_MySQL...

    一.导出数据外部 1)mysql连接+将查询结果输出到文件.在命令行中执行(windows的cmd命令行,mac的终端) mysql -hxx -uxx -pxx -e "query sta ...

  5. Can not issue data manipulation statements with executeQuery()错误解决

    转: Can not issue data manipulation statements with executeQuery()错误解决 2012年03月27日 15:47:52 katalya 阅 ...

  6. 记录Mybatis报Mapped Statements collection already contains value for 的错误的原因

    在一次提供升级包让同事升级后,启动服务时出现Mybatis报Mapped Statements collection already contains value for 的错误,导致无法启动. 1. ...

  7. Different number of columns

    org.apache.flink.client.program.ProgramInvocationException: The main method caused an error: Column ...

  8. DHCP服务启动报“bad subnet number/mask combination.”的解决办法

    DHCP服务启动报"bad subnet number/mask combination."的解决办法 自家的linux服务器上搭建DHCP服务在重启后出现报错,但是光看表面的原因 ...

  9. java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决方法

    在myeclipse下出现java.lang.UnsupportedClassVersionError: Bad version number in .class file异常,是由于编译器版本不一样 ...

最新文章

  1. Windows XP下,JDK环境变量配置
  2. java 对象怎么序列化,java对象序列化总结
  3. 你可以保持沉默,但你所说的一切都将成为呈堂证供——浅谈Azure WORM保护
  4. 找到最大回文子串_使用O(1)空间复杂度找到最大的回文子串
  5. 第123天:移动web开发中的常见问题
  6. 一个没有停止的android闹钟,一旦开始就要把歌唱完 .
  7. PoolTogether 奖池开奖一名用户赢得 43,760 美元,本金仅为 73 美元
  8. 最近公共祖先LCA 【专题@AbandonZHANG】
  9. python入门指南by许半仙长佩_有哪些好看的耽美文啊?
  10. VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)
  11. 小游戏---java版2048(2048 go go go)
  12. u盘启动盘恢复计算机,怎么还原u盘启动盘为普通u盘?
  13. 基于Vision Transformer的视频哈希检索识别虚假视频
  14. 渗透测试实验_安装Windows 2003 企业版
  15. Debian10.6 Xfce 系统安装教程
  16. python关于模块说法错误的是_python常用模块错题
  17. 利用python爬取教务系统中成绩
  18. 设计一个以1秒频率闪烁的LED灯(亮灭各500ms)
  19. 技术人要学会自我营销
  20. 计算机的硬盘有几个分区,电脑硬盘分几个区合适,电脑硬盘怎么分区最合理?

热门文章

  1. 区间dp——cf1025D二叉搜索树的中序遍历好题!
  2. 微服务写的最全的一篇文章
  3. 购买域名和GitHub映射
  4. ssh整合出现的错误
  5. 表单提交防止恶意修改
  6. JSP自定义标签由浅到深讲解
  7. 主数据处理链碰到空数据节点不在继续执行的问题解决方案
  8. js 子窗口关闭并且刷新父窗口
  9. GTimeSheet正式启用官方网站
  10. [转] ASP.NET中使用javascript