sql难点

news2025/2/13 20:24:54

一、

假设你有一个查询,需要根据 id 是否为 null 来动态生成 SQL 条件:

xml复制

<select id="getResources" resultType="Resource">
    SELECT * FROM resources
    <where>
        <if test="id != null">
            and id <![CDATA[<>]]> #{id}
        </if>
    </where>
</select>

生成的 SQL

假设 id 的值为 123,生成的 SQL 将是:

sql复制

SELECT * FROM resources
WHERE id <> 123

如果 idnull,则不会生成任何条件,生成的 SQL 将是:

sql复制

SELECT * FROM resources

从表 resources 中选择所有列(* 表示所有列),但只选择那些 id 字段不等于 123 的记录。

二、

查询解释

sql复制

SELECT
    IFNULL(MAX(IFNULL(ORDER_NO, 0)), 0)
FROM
    scm_web_classify_tab
WHERE
    DELETE_FLAG = 0
    AND TENANT_ID = #{tenantId}
  1. IFNULL(ORDER_NO, 0)

    • 这个函数确保 ORDER_NO 如果为 NULL,则用 0 替代。这样可以避免 MAX 函数在处理 NULL 值时的问题。

  2. MAX(...)

    • 这个函数用于获取 ORDER_NO 的最大值。如果所有 ORDER_NO 都是 NULLMAX 函数会返回 NULL

  3. IFNULL(..., 0)

    • 这个函数确保如果 MAX 函数的结果是 NULL,则用 0 替代。这样可以确保最终结果总是返回一个数字,而不是 NULL

三、

SQL 片段解释

sql复制

CASE
    WHEN r.REPORT_TYPE = 3 THEN CONCAT(cci.REPORT_CYCLE_YEAR, '年', r.REPORT_NAME)
    WHEN r.REPORT_TYPE = 2 THEN CONCAT(cci.REPORT_CYCLE_YEAR, '年',
        CASE
            WHEN cci.REPORT_CYCLE_QUARTER = 1 THEN '第一季度'
            WHEN cci.REPORT_CYCLE_QUARTER = 2 THEN '第二季度'
            WHEN cci.REPORT_CYCLE_QUARTER = 3 THEN '第三季度'
            WHEN cci.REPORT_CYCLE_QUARTER = 4 THEN '第四季度'
        END
    )
    -- 可以继续添加其他条件
END

详细解释

  1. CASE WHEN

    • CASE 语句用于根据条件选择不同的值。

    • WHEN r.REPORT_TYPE = 3:如果 r.REPORT_TYPE 的值为 3,则执行 THEN 后面的表达式。

    • THEN CONCAT(cci.REPORT_CYCLE_YEAR, '年', r.REPORT_NAME):将 cci.REPORT_CYCLE_YEARr.REPORT_NAME 拼接成一个字符串,中间用 连接。

  2. 嵌套 CASE WHEN

    • WHEN r.REPORT_TYPE = 2 的情况下,进一步使用嵌套的 CASE 语句来处理季度的情况。

    • WHEN cci.REPORT_CYCLE_QUARTER = 1 THEN '第一季度':如果 cci.REPORT_CYCLE_QUARTER 的值为 1,则返回字符串 第一季度

    • 同样地,处理其他季度的情况。

四、

示例代码

xml复制

<if test="tableName=='zb_logistics_enterprises_manage' or tableName=='zb_logistics_park_base_run_monitor' or tableName=='zb_report_cold_chain_logistics_enterprises_info'">
    ${bColumnName},
    ec_lc.STATE lastCycleState,
</if>

详细解释

  1. bColumnName

    • bColumnName 是一个动态列名,它可能是通过某种逻辑动态生成的,或者从用户输入中获取的。

    • 使用 ${} 语法直接将 bColumnName 的值插入到 SQL 中。这允许你在运行时动态指定列名。

    • 例如,bColumnName 可能是 ec_lc.NAMEec_lc.ID 等,具体取决于业务需求。

table_a
Column NameData Type
idINT
nameVARCHAR
created_atDATETIME
 System.out.println("aColumnName: " + paramMap.get("aColumnName"));
        System.out.println("bColumnName: " + paramMap.get("bColumnName"));

假设 table_a 的列名是 id, name, created_at,则输出可能是:

aColumnName: a.id,a.name,a.created_at
bColumnName: b.id1,b.name1,b.created_at1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2297540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle表分区--范围分区

文章目录 oracle表分区分区的原因分区的优势oracle表分区的作用oracle表分区类型一、范围分区二、 创建分区表和使用&#xff1a;1、按照数值范围划分2、按照时间范围3、MAXVALUE2. 向现有表添加新的分区3、 分区维护和重新组织&#xff08;合并/删除&#xff09; oracle表分区…

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式&#xff0c;而主从复制的目的&#xff0c;是为了读写分离。 读写分离&#xff0c;拿spring boot项目来说&#xff0c;可以有2种方式&#xff1a; 1&#xff09;设置2个数据源&#xff0c;读和写分开使用 2&#xff09;使用中间件…

Untiy3d 铰链、弹簧,特殊的物理关节

&#xff08;一&#xff09;铰链组件 1.创建一个立方体和角色胶囊 2.给角色胶囊挂在控制脚本和刚体 using System.Collections; using System.Collections.Generic; using UnityEngine;public class plyer : MonoBehaviour {// Start is called once before the first execut…

Visual Studio 进行单元测试【入门】

摘要&#xff1a;在软件开发中&#xff0c;单元测试是一种重要的实践&#xff0c;通过验证代码的正确性&#xff0c;帮助开发者提高代码质量。本文将介绍如何在VisualStudio中进行单元测试&#xff0c;包括创建测试项目、编写测试代码、运行测试以及查看结果。 1. 什么是单元测…

Leetcode - 周赛435

目录 一、3442. 奇偶频次间的最大差值 I二、3443. K 次修改后的最大曼哈顿距离三、3444. 使数组包含目标值倍数的最少增量四、3445. 奇偶频次间的最大差值 II 一、3442. 奇偶频次间的最大差值 I 题目链接 本题使用数组统计字符串 s s s 中每个字符的出现次数&#xff0c;然后…

算法之 数论

文章目录 质数判断质数3115.质数的最大距离 质数筛选204.计数质数2761.和等于目标值的质数对 2521.数组乘积中的不同质因数数目 质数 质数的定义&#xff1a;除了本身和1&#xff0c;不能被其他小于它的数整除&#xff0c;最小的质数是 2 求解质数的几种方法 法1&#xff0c;根…

docker 导出导入

1第一步骤docker save docker save -o database-export-4.1.0.tar database-export-4.1.0.jar:latest 2检查镜像ls -l, 注意&#xff1a;文件可能没有其他文件导出权限&#xff1a;chmod 644 database-export-4.1.0.tar 3在新的服务器导入&#xff1a; docker load -i databa…

OSPF高级特性(3):安全特效

引言 OSPF的基础我们已经结束学习了&#xff0c;接下来我们继续学习OSPF的高级特性。为了方便大家阅读&#xff0c;我会将高级特性的几篇链接放在末尾&#xff0c;所有链接都是站内的&#xff0c;大家点击即可阅读&#xff1a; OSPF基础&#xff08;1&#xff09;&#xff1a;工…

基于SSM的农产品供销小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、农户功能模块&#xff1a;用户管理、农户管理、产品分类管理、农产品管理、咨询管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试…

Unity URP的2D光照简介

官网工程&#xff0c;包括2d光照&#xff0c;动画&#xff0c;动效介绍&#xff1a; https://unity.com/cn/blog/games/happy-harvest-demo-latest-2d-techniques https://docs.unity3d.com/6000.0/Documentation/Manual/urp/Lights-2D-intro.html 人物脸部光照细节和脚上的阴影…

Jenkins 部署 之 Mac 一

Jenkins 部署 之 Mac 一 一.Jenkins 部署依赖 JDK 环境 查看 Mac JDK 环境&#xff0c;如果没有安装&#xff0c;先安装 打开终端输入命令:java -version Mac安装配置 JDK 二. 检查 HomeBrew 安装 检查 HomeBrew 是否安装&#xff0c;终端输入命令:brew -v Mac安装HomeB…

钉钉位置偏移解决,钉钉虚拟定位打卡

虚拟定位打卡工具 一&#xff0c;介绍免费获取工具 一&#xff0c;介绍 提到上班打卡&#xff0c;职场人的内心戏估计能拍成一部连续剧。打卡&#xff0c;这俩字仿佛自带“紧箍咒”&#xff0c;让无数打工人又爱又恨。想象一下&#xff0c;你气喘吁吁地冲进办公室&#xff0c;…

使用DeepSeek和Kimi快速自动生成PPT

目录 步骤1&#xff1a;在DeepSeek中生成要制作的PPT主要大纲内容。 &#xff08;1&#xff09;在DeepSeek网页端生成 &#xff08;2&#xff09;在本地部署DeepSeek后&#xff0c;使用chatBox生成PPT内容 步骤2&#xff1a;将DeepSeek成的PPT内容复制到Kimi中 步骤3&…

Webpack包

黑马程序员视频地址&#xff1a; Node.js与Webpack-16.Webpack简介以及体验 前言&#xff1a; 本篇中部分标题后标有数字&#xff0c;代表学习顺序 &#xff0c;同时也可以作为使用顺序参考 webpack包 基础认识 初步使用 下载webpack包和webpack-cli包 注意点&#xff1a; 1…

鸿蒙HarmonyOS NEXT开发:横竖屏切换开发实践

文章目录 一、概述二、窗口旋转说明1、配置module.json5的orientation字段2、调用窗口的setPreferredOrientation方法 四、性能优化1、使用自定义组件冻结2、对图片使用autoResize3、排查一些耗时操作 四、常见场景示例1、视频类应用横竖屏开发2、游戏类应用横屏开发 五、其他常…

基于Spring Security 6的OAuth2 系列之十五 - 高级特性--客户端认证方式

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级…

排序合集之快排详解(二)

摘要&#xff1a;快速排序是一种在实践中广泛使用的高效排序算法。它基于分治策略&#xff0c;平均时间复杂度为O(n log n)&#xff0c;使其成为处理大型数据集的理想选择。本文将深入探讨快速排序的各种实现方式、优化技巧以及非递归实现&#xff0c;并通过C语言代码示例进行详…

前缀树算法篇:前缀信息的巧妙获取

前缀树算法篇&#xff1a;前缀信息的巧妙获取 那么前缀树算法是一个非常常用的算法&#xff0c;那么在介绍我们前缀树具体的原理以及实现上&#xff0c;我们先来说一下我们前缀树所应用的一个场景&#xff0c;那么在一个字符串的数据集合当中&#xff0c;那么我们查询我们某个字…

大数据系列 | 白话讲解大数据技术生态中Hadoop、Hive、Spark的关系介绍

大数据属于数据管理系统的范畴&#xff0c;数据管理系统无非就两个问题&#xff1a;数据怎么存、数据怎么算    现在的信息爆炸时代&#xff0c;一台服务器数据存不下&#xff0c;可以找10台服务器存储&#xff0c;10台存储不下&#xff0c;可以再找100台服务器存储。但是这1…

华为云函数计算FunctionGraph部署ollma+deepseek

1 概述 ollama和deepseek如果需要多实例&#xff0c;一种方式是部署在kubernetes集群中&#xff0c;一种是使用云厂商的云函数服务。云函数服务是按量付费&#xff0c;并且底层支持GPU&#xff0c;不需要维护kubernetes集群。本文介绍使用华为云函数计算FunctionGraph来部署ol…