• [转载] 关于出现“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式”错误的可能原因


    1、 对于该问题确实存在UNION前后SELECT语句中的列数不同导致;
    2、 以下为个人遇到的一种可能:
    在项目开发中由于有张表是动态的,即有个基础表,其他的表按年月根据基础表来生成动态表,动态表结构和基础表保持一致。从动态表和基础表中同时查询数据,且根据各自的条件进行查询并将结果合并返回时,出现了“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式”错误,sql语句大致如下:
    SELECT * FROM test WHERE id >= ‘’ UNION SELECT * FROM test_201501 WHERE id>=’’;
    将该sql语句直接在数据库执行,没有出现任何错误,但是在Java代码中使用SQLQuery时出现了该错误,对该问题感觉很纳闷,于是将Java中执行的sql拿出来在数据库中执行还是没有发现问题,但Java中执行该问题依旧存在,由于对合并后的结果还需要根据某字段进行排序操作,于是就自己不断调试,最终sql如下:
    SELECT * FROM 
    (
    SELECT * FROM test WHERE id >= ‘’ UNION SELECT * FROM test_201501 WHERE id>=’’
    ) t ORDER BY ID DESC;
    把Java中执行的sql改成以上结果时,该问题得以修复。
    说明:UNION后的结果集也可以看做一张临时表,然后从该表中查询数据即可,注意,其中红色的t代表该临时表的表名。

  • 相关阅读:
    linux学习笔记
    HDMI之CEC DDC学习笔记(可能有误)
    MAP按照value排序
    Map遍历四种方法
    Java native方法
    [PAT] 1143 Lowest Common Ancestor (30 分)Java
    [PAT] 1148 Werewolf
    [PAT] 1096 Consecutive Factors (20 分)Java
    [PAT] 1092 To Buy or Not to Buy (20 分)Java
    [PAT] 1088 Rational Arithmetic (20 分)Java
  • 原文地址:https://www.cnblogs.com/AaronBear/p/6643011.html
Copyright © 2020-2023  润新知