yjy别看我的文章 2023-12-01 14:50 采纳率: 64.3%
浏览 4

xml的查询数据的sql数据丢失

java用xml写的sql,select后面的查询字段中,最后三个查询不出来,如果把最后三个放在前面,又可以查询出来了,但是还是最后三个字段查询不出来。

   SELECT
        period.period_code AS PeriodCode,
        period.period_go_time AS periodGoTime,
        (
        CASE
        period.period_status
        WHEN 1 THEN
        '销售'
        WHEN 2 THEN
        '暂停'
        WHEN 3 THEN
        '售罄'
        WHEN 4 THEN
        '截团'
        WHEN 5 THEN
        '出团'
        WHEN 6 THEN
        '回团'
        WHEN 7 THEN
        '取消'
        WHEN 8 THEN
        '恢复' ELSE '未知状态'
        END
        )  periodStatusName,
        (
        CASE
        line.line_type
        WHEN 1 THEN
        '散拼'
        WHEN 2 THEN
        '考察'
        WHEN 3 THEN
        '旅居'
        WHEN 4 THEN
        '度假'
        WHEN 5 THEN
        '私人定制'
        WHEN 6 THEN
        '周边游'
        WHEN 7 THEN
        '一日游'
        WHEN 8 THEN
        '邮轮'
        WHEN 9 THEN
        '大型活动' ELSE '未知类型'
        END
        )  lineTypeName,
        (
        SELECT
        GROUP_CONCAT( plac.personnel_name SEPARATOR ',' )
        FROM
        li_personnel_placement AS plac
        WHERE
        plac.personnel_type = 3
        AND period.id = plac.period_id
        <if test="request.guideName !=null and request.guideName != ''">
            AND plac.personnel_name like concat('%',#{request.guideName},'%')
        </if>
        )  guideName,
        (
        SELECT
        GROUP_CONCAT( plac.personnel_name SEPARATOR ',' )
        FROM
        li_personnel_placement AS plac
        WHERE
        plac.personnel_type = 2
        AND period.id = plac.period_id
        <!--领队-->
        <if test="request.leaderName !=null and request.leaderName != ''">
            AND plac.personnel_name like concat('%',#{request.leaderName},'%')
        </if>
        )  leader_name,
        (
        SELECT
        GROUP_CONCAT( placs.personnel_name SEPARATOR ',' )
        FROM
        li_personnel_placement AS placs
        WHERE
        placs.personnel_type = 1
        AND period.id = placs.period_id
        <!--保健医-->
        <if test="request.doctorName !=null and request.doctorName != ''">
            AND placs.personnel_name like concat('%',#{request.doctorName},'%')
        </if>
        )  doctorName,
        period.period_stock  periodStock,
        period.period_sell_stock  periodSellStock,
        period.period_surplus_stock  periodSurplusStock,
        period.period_code  periodCode,
        period.period_go_time  periodGoTime,
        period.period_back_time  periodBackTime,
        period.product_name  productName,
        period.tour_product_research_name  tourProductResearchName,
        period.period_minimum_clustering  periodMinimumClustering,
        line.line_name  lineName,
        product.supplier_company_name  supplierName

        FROM
        li_regimental_period AS period
        LEFT JOIN li_line_info line ON period.period_info_id = line.id
        LEFT JOIN li_tour_product_info product ON period.period_product_id = product.id
        WHERE
        1 = 1
        <!--团号-->
        <if test="request.periodCode !=null and request.periodCode != ''">
            AND period.period_code like concat('%',#{request.periodCode},'%')
        </if>
        <!--产品名称-->
        <if test="request.tourProductName !=null and request.tourProductName != ''">
            AND period.product_name like concat('%',#{request.tourProductName},'%')
        </if>
        <!--是否成团 :是-->
        <if test="request.isRegimental !=null and request.isRegimental == 1">
            AND period.period_sell_stock &gt;= period.period_minimum_clustering
        </if>
        <!--是否成团:否-->
        <if test="request.isRegimental !=null and request.isRegimental == 0">
            AND period.period_sell_stock &lt;= period.period_minimum_clustering
        </if>
        <!--线路类型-->
        <if test="request.lineType !=null">
            AND period.line_type == #{request.LineType}
        </if>
        <!--出团日期A-->
        <if test="request.periodGoTimeA != null and request.periodGoTimeA !='' ">
            and period.period_go_time &gt;= #{request.periodGoTimeA}
        </if>
        <!--出团日期B-->
        <if test="request.periodGoTimeB != null and request.periodGoTimeB !='' ">
            and period.period_go_time &lt;= #{request.periodGoTimeB}
        </if>
        <!--回团日期A-->
        <if test="request.periodBackTimeA != null and request.periodBackTimeA !='' ">
            and period.period_back_time &gt;= #{request.periodBackTimeA}
        </if>
        <!--回团日期B-->
        <if test="request.periodBackTimeB != null and request.periodBackTimeB !='' ">
            and period.period_back_time &lt;= #{request.periodBackTimeB}
        </if>
    </select>


比如现在在最后的是:periodMinimumClustering、lineName、supplierName,那么这三个就查不出来,不是没数据就是如果把他们三个放到前面就能查出来,这个sql在数据库跑过,完全可以查询出来,在java跑的时候生成的sql,在数据库跑了一遍也可以查询出来
以下是Java跑完代码生成的sql:
SELECT period.period_code AS PeriodCode, period.period_go_time AS periodGoTime, ( CASE period.period_status WHEN 1 THEN '销售' WHEN 2 THEN '暂停' WHEN 3 THEN '售罄' WHEN 4 THEN '截团' WHEN 5 THEN '出团' WHEN 6 THEN '回团' WHEN 7 THEN '取消' WHEN 8 THEN '恢复' ELSE '未知状态' END ) periodStatusName, ( CASE line.line_type WHEN 1 THEN '散拼' WHEN 2 THEN '考察' WHEN 3 THEN '旅居' WHEN 4 THEN '度假' WHEN 5 THEN '私人定制' WHEN 6 THEN '周边游' WHEN 7 THEN '一日游' WHEN 8 THEN '邮轮' WHEN 9 THEN '大型活动' ELSE '未知类型' END ) lineTypeName, ( SELECT GROUP_CONCAT( plac.personnel_name SEPARATOR ',' ) FROM li_personnel_placement AS plac WHERE plac.personnel_type = 3 AND period.id = plac.period_id ) guideName, ( SELECT GROUP_CONCAT( plac.personnel_name SEPARATOR ',' ) FROM li_personnel_placement AS plac WHERE plac.personnel_type = 2 AND period.id = plac.period_id ) leader_name, ( SELECT GROUP_CONCAT( placs.personnel_name SEPARATOR ',' ) FROM li_personnel_placement AS placs WHERE placs.personnel_type = 1 AND period.id = placs.period_id ) doctorName, period.period_stock periodStock, period.period_sell_stock periodSellStock, period.period_surplus_stock periodSurplusStock, period.period_code periodCode, period.period_go_time periodGoTime, period.period_back_time periodBackTime, period.product_name productName, period.tour_product_research_name tourProductResearchName, period.period_minimum_clustering periodMinimumClustering, line.line_name lineName, product.supplier_company_name supplierName FROM li_regimental_period AS period LEFT JOIN li_line_info line ON period.period_info_id = line.id LEFT JOIN li_tour_product_info product ON period.period_product_id = product.id WHERE 1 = 1 AND period.period_code like concat('%','Group-231100303','%') LIMIT 10

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-12-01 20:40
    关注

    所有内容均由人工智能模型输出,其内容的准确性和完整性无法保证,不代表我的态度或观点。

    该回答引用ChatGPT-3.5,仅为您提供参考,不保证完全正确
    看起来你的XML查询SQL是基于Java代码动态生成的。你遇到的问题是,当最后三个字段(periodMinimumClusteringlineNamesupplierName)放在查询字段的末尾时,无法正确查询出它们。如果将它们放在前面,就可以正常查询,但问题仍然存在。


    以下是一些建议来排查和解决这个问题:

    1. 检查生成的SQL:
      打印或记录在Java中执行的最终SQL语句。验证生成的SQL是否符合预期,检查最后三个字段是否按照正确的顺序出现。

    2. 验证列名和别名:
      确保列名或别名中没有命名冲突或重复。问题可能与数据库如何解释或解析列名有关。

    3. 调试SQL执行:
      直接在数据库管理工具中运行生成的SQL,看看问题是否仍然存在。这有助于确定问题是与SQL本身还是与Java代码有关。

    4. 检查数据库模式:
      仔细检查数据库模式,确保这些列(periodMinimumClusteringlineNamesupplierName)存在于相应的表(li_regimental_periodli_line_infoli_tour_product_info)中,并且可以在查询中访问。

    5. 检查XML配置:
      如果使用XML配置来定义SQL查询,确保XML元素与数据库列之间的映射是正确的。

    6. 验证Java代码:
      检查动态生成SQL查询的Java代码。确保没有逻辑错误或条件导致最后三个字段被排除。

    7. 使用静态查询进行测试:
      暂时修改Java代码,使用最后三个字段位于末尾的静态SQL查询。如果这样可以正常工作,可能有助于缩小问题范围,确定问题是与动态查询生成有关。

    8. 数据库驱动和版本:
      检查数据库驱动程序与数据库本身的兼容性和版本。有时,问题可能是由于不兼容引起的。

    请记住,逐个进行更改并在每次修改后进行测试,以确定问题的具体原因。如果问题仍然存在,请提供有关XML配置和动态SQL生成过程的更多详细信息,以便我能够提供更有针对性的帮助。


    该回答引用NewBing,仅为您提供参考,不保证完全正确
    超出输入上限


    该回答引用文心大模型3.5,仅为您提供参考,不保证完全正确
    超出输入上限


    该回答引用讯飞星火认知大模型,仅为您提供参考,不保证完全正确
    这个问题可能是由于在Java代码中,查询条件的顺序导致了结果集的不一致。你可以尝试将查询条件按照一定的顺序进行调整,例如:

    SELECT period.period_code AS PeriodCode, period.period_go_time AS periodGoTime, ( CASE period.period_status WHEN 1 THEN '销售' WHEN 2 THEN '暂停' WHEN 3 THEN '售罄' WHEN 4 THEN '截团' WHEN 5 THEN '出团' WHEN 6 THEN '回团' WHEN 7 THEN '取消' WHEN 8 THEN '恢复' ELSE '未知状态' END ) periodStatusName, ( CASE line.line_type WHEN 1 THEN '散拼' WHEN 2 THEN '考察' WHEN 3 THEN '旅居' WHEN 4 THEN '度假' WHEN 5 THEN '私人定制' WHEN 6 THEN '周边游' WHEN 7 THEN '一日游' WHEN 8 THEN '邮轮' WHEN 9 THEN '大型活动' ELSE '未知类型' END ) lineTypeName, ( SELECT GROUP_CONCAT( plac.personnel_name SEPARATOR ',' ) FROM li_personnel_placement AS plac WHERE plac.personnel_type = 3 AND period.id = plac.period_id ) guideName, ( SELECT GROUP_CONCAT( plac.personnel_name SEPARATOR ',' ) FROM li_personnel_placement AS plac WHERE plac.personnel_type = 2 AND period.id = plac.period_id ) leader_name, ( SELECT GROUP_CONCAT( placs.personnel_name SEPARATOR ',' ) FROM li_personnel_placement AS placs WHERE placs.personnel_type = 1 AND period.id = placs.period_id ) doctorName, period.period_stock periodStock, period.period_sell_stock periodSellStock, period.period_surplus_stock periodSurplusStock, period.period_code periodCode, period.period_go_time periodGoTime, period.period_back_time periodBackTime, period.product_name productName, period.tour_product_research_name tourProductResearchName, period.period_minimum_clustering periodMinimumClustering, line.line_name lineName, product.supplier_company_name supplierName FROM li_regimental_period AS period LEFT JOIN li_line_info line ON period.period_info_id = line.id LEFT JOIN li_tour_product_info product ON period.period_product_id = product.id WHERE 1 = 1 AND period.period_code like concat('%','Group-231100303','%') LIMIT 10
    

    在这个查询中,我将periodStatusNamelineTypeNameguideNameleader_namedoctorNameperiodStockperiodSellStockperiodSurplusStockperiodCodeperiodGoTimeperiodBackTimeproductNametourProductResearchNameperiodMinimumClusteringlineNamesupplierName这些字段放在了前面,这样在执行查询时,数据库会先匹配这些字段,然后再匹配其他条件。这样可以确保查询结果的一致性。


    该回答引用通义千问大模型,仅为您提供参考,不保证完全正确
    根据您提供的信息,这个问题可能是因为SQL查询语句的长度超出了数据库允许的最大长度。在MySQL中,可以使用max_allowed_packet参数来设置最大允许的包长度。
    您可以尝试以下方法解决此问题:

    1. 在MySQL服务器上增加max_allowed_packet参数的值。可以在MySQL配置文件(通常是my.cnf或my.ini)中增加以下行:
    [mysqld]
    max_allowed_packet=20M
    
    1. 如果您无法访问MySQL服务器的配置文件,可以在连接数据库时通过URL参数来设置max_allowed_packet的值。例如:
    jdbc:mysql://localhost
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月1日

悬赏问题

  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题