MySQL or条件命中

news2024/9/28 15:29:08

需求如下:当写入SQL语句中有任意一个字段在数据库中存在时,不可写入,并返回具体的重复字段。

使用Java Steam处理数据集循环执行SQL需要多次执行SQL,适合单条件索引的情况下使用,现状是想执行少量的SQL实现需求,固出现以下SQL思路,欢迎讨论。

模拟需求如下:当id和name有任意一个名称重复的情况下,不可写入,并返回是id重复或者name重复。

建表SQL 模拟四条数据:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 'name1');
INSERT INTO `sys_user` VALUES (2, 'name2');
INSERT INTO `sys_user` VALUES (3, 'name3');
INSERT INTO `sys_user` VALUES (4, 'name4');

SET FOREIGN_KEY_CHECKS = 1;

实现思路:
使用count计算出符合or条件的命中数量,通过命中数量判断具体哪个字段命中,有可能出现多字段同时命中的情况,通过程序判断命中优先级,返回前端即可。

第一种情况:单条件命中,模拟SQL如下:
select 
count(case when `name` = "name1" then 1 end ) as 命中name数量,
count(case when `id` = "5" then 1 end) as 命中id数量 
from sys_user where `name` = "name1" or `id` = "5"

执行结果:
在这里插入图片描述
命中name1,id为5不存在,命中为0,符合预期。

第二种情况:多条件命中,模拟SQL如下:
select count(case when `name` = "name1" then 1 end ) as 命中name数量,
count(case when `id` = "4" then 1 end) as 命中id数量
from sys_user where `name` = "name1" or `id` = "4"

执行结果:
在这里插入图片描述
name4命中,id为4命中。由程序通过字段优先级判断返回校验结果。

第三种情况:无条件命中,模拟SQL如下:
select count(case when `name` = "name5" then 1 end ) as 命中name数量,
count(case when `id` = "5" then 1 end) as 命中id数量
from sys_user where `name` = "name5" or `id` = "5"

执行结果:
在这里插入图片描述
name5无命中,id为5无命中。校验通过即可。

这种SQL推荐OR条件涉及到的字段都要使用索引,否则数据量大之后效率低下。

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

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

相关文章

操作系统,计算机网络,数据库刷题笔记12

操作系统,计算机网络,数据库刷题笔记12 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql&#xf…

u盘/移动硬盘的视频文件出现损坏怎么办?修复损坏视频办法分享!

一般情况下,视频文件都是比较大,如果直接存放于电脑,就会占用比较大的存储空间。不少小伙伴都会把它存放于U盘或者移动硬盘,而且作为一种便携式硬盘,可以在各电脑之间使用,非常方便。但这也造成文件很容易出…

【OpenCV-Python】教程:6-4 Depth Map from Stereo Images 立体图像的深度图

OpenCV Python Depth Map from Stereo Images 立体图像的深度图 【目标】 通过立体图像创建一个深度图 【理论】 上一节中,我们学习了一些基本概念,如对极约束和其他一些相关术语。我们还可以看到,如果我们有同一个场景的两张图像&#x…

无尘室中高效过滤器的更换时间

广州特耐苏净化设备有限公司详细介绍无尘室中高效过滤器使用多久需要更换 为了保证产品的生产质量和人员工作环境的舒适性,无尘室对环境的湿度、温度、新鲜空气量、状态、照明等都有严格的规定。无尘室系统一般配备三级过滤器的空气净化系统,采用初效、…

西门子博途与上位机TCPIP通信

1、PLC硬件IP设定及组态如下图: 堆垛机 1号机 IP地址:190.20.0.72 掩码 255.255.255.0 2、PLC与上位机TCP网络连接组态如下图: WCS上位机IP地址设定 IP地址:190.20.0.250 掩码 255.255.255.0…

[强网杯 2019]Upload

一、信息收集 打开界面是一个登陆,界面随便注册一个然后登陆 然后是一个上传文件的操作,点击php后发现的回显 然后又上传了一个图片文件,显示出了照片的存放路径,这里可以上传图片码 然后抓包看一下,base64解码 a:5:{…

想要学习次世代3d建模,需要用到哪些软件,制作流程是什么?

在校大学生想要学习游戏次世代建模,首先就要先了解次世代是什么?制作建模所需要用到的软件有哪些,随着次世代游戏的不断发展,游戏美术制作流程也迎来了全新的制作方式,像ZBrush、SP等软件就解放了我们的双手和制作方式…

Spark-Spark Sql(DataFrame、DataSet、Scala代码开发、数据的加载和保存)

文章目录Spark SqlHive and SparkSQL特点DataFrame 是什么DataSet 是什么核心编程新的起点DataFrame创建SQL语法DSL 语法RDD > DataFrameDataFrame > RDDDataSet创建RDD > DataSetDataSet > RDDDataFrame > DataSetDataSet > DataFrameRDD、DataFrame、DataS…

CSND近期推出的猿如意到底有没有必要安装

可能很多人还不知道猿如意是什么,先给大家科普一下 猿如意 工具代码,一搜就有 程序员的如意兵器 猿如意是一款面向开发者的辅助开发工具箱,包含了效率工具、开发工具下载,教程文档,代码片段搜索,全网搜索等…

Raydium被盗造成巨额损失,但Zebec Protocol以及$ZBC并未受影响

在12月17日,Solana上最大的DEX Raydium因木马攻击导致流动性资金池所有者帐户的私钥泄露,攻击者访问了资金池所有者帐户,然后能够调用withdraw pnl函数,该函数用于收集池中掉期所赚取的交易/协议费用。 而受影响的资金池包括SOL-…

论文翻译:LiDAR Based Negative Obstacle Detection for Field Autonomous Land Vehicles

论文地址:https://onlinelibrary.wiley.com/doi/full/10.1002/rob.21609?saml_referrer (机翻,自己保存观看的) Abstract: 野外自动驾驶陆地车辆(ALV)的负障碍是指沟渠、坑或具有负坡度的地形&…

在Vue3这样子写页面更快更高效

前言 在开发管理后台过程中,一定会遇到不少了增删改查页面,而这些页面的逻辑大多都是相同的,如获取列表数据,分页,筛选功能这些基本功能。而不同的是呈现出来的数据项。还有一些操作按钮。 对于刚开始只有 1&#xff…

【JavaScrip】for循环

文章目录for循环案例1:两数相加案例2:绘制九九乘法表案例3:水仙花数案例4:绘制菱形案例5:计算表达式的结果break和continuefor循环 for循环理解成循环的一种简洁(结构)的写法. 语法结构: for(初始化;限制条件;变量值的…

vue封装背景知识小插曲之插槽slot的用法

vue封装背景知识小插曲之插槽slot的用法一 什么是插槽slot&#xff0c;都可以干啥&#xff1f;二 常见的插槽用法一 什么是插槽slot&#xff0c;都可以干啥&#xff1f; 直白点说就是子组件使用<slot> 先占了个地方&#xff0c;然后当父组件使用子组件的时候&#xff0c;…

第十三章 半监督学习

13.1 未标记样本 事实上&#xff0c;未标记样本虽未直接包含标记信息&#xff0c;但若它们与有标记样本是从同样的数据源独立同分布采样而来&#xff0c;则它们所包含的关于数据分布的信息对建立模型将大有裨益。下图给出一个直观的例示。若仅基于图中的一个正例和一个反例&am…

Next.js项目部署,使用Nginx和pm2

概述 只有一台服务器&#xff0c;所以上图服务都都在一个云服务器上。其中Nginx 分别在用户和Next服务之间代理、在Next和后台之间代理。 常规的前台页面不需要这样做&#xff0c;例如Vue中直接把build之后的dist文件拷贝到nginx的html目录并配置nginx指向即可&#xff0c;但是…

Vue的底层原理

如何追踪变化 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项&#xff0c;Vue 将遍历此对象所有的 property&#xff0c;并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。 这些 getter/setter 对用户来说是不可见的&#xff0c;但是在…

RK3588平台开发系列讲解(GPIO篇)配置GPIO需要了解的概念

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、 GPIO(通⽤输⼊输出)二、IOMUX(输⼊输出复⽤)三、PULL(端口上下拉)四、DRIVE-STRENGTH(端口驱动强度)五、 SMT(端口斯密特触发器)沉淀、分享、成长,让自己和他人都能有所收获!😄 …

SAP Gateway 在开发系统和生产系统上的缓存控制

SAP Gateway 元数据缓存可以启用和禁用&#xff0c;并且在非生产系统中默认停用。 我们推荐以下缓存设置&#xff1a; 开发系统 应该禁用 SAP Gateway 元数据缓存&#xff0c;以便始终获取最新的元数据&#xff08;默认设置&#xff09;。 OData 通道应用程序应在其模型提供…

UNIAPP实战项目笔记53 登录的前端和后端nodejs对接以及写后端接口和接口文档

UNIAPP实战项目笔记53 登录的前端和后端对接以及写后端接口和接口文档 实际案例图片 输入手机号或用户名登录页面 代码 login.vue页面 <template><view class"login"><swiper vertical"true" style"height: 100vh;"><swi…