使用 MySQL 子查询和 CASE 语句判断关联状态

使用 MySQL 子查询和 CASE 语句判断关联状态

  • 一、前言
    • 1.表结构及样例数据
      • 1.1`card_management`
      • 1.2`card_auth_register`
  • 二、SQL 查询实现
    • 1.逐步讲解
      • 2.1 基本选择
      • 2.2 添加 CASE 语句
      • 2.3解释 CASE 语句
      • 2.4完整查询
      • 2.5查询结果
    • 2.结论


一、前言

在这篇文章中,我们将详细讲解如何使用 MySQL 的子查询和 CASE 语句来实现复杂的逻辑判断。具体案例是我们有两个表 card_managementcard_auth_register,其中 card_management 表存储了卡片的基本信息,而 card_auth_register 表存储了卡片的授权状态。我们的目标是为每个卡片创建一个新字段 enable_status_v,并根据以下规则进行赋值:

  • 如果该卡片在 card_auth_register 表中有一条记录的 auth_status 为 “已下发”,则 enable_status_v 显示 “已下发”。
  • 否则,enable_status_v 显示 “待下发”。

1.表结构及样例数据

假设我们有以下两个表:

1.1card_management

idcard_name
1Card A
2Card B
3Card C

1.2card_auth_register

idcardauth_status
11已下发
21待下发
32已失效
43待下发

二、SQL 查询实现

为了实现上述逻辑,我们可以使用子查询和 CASE 语句。以下是实现的 SQL 查询:

SELECT cm.*, CASE WHEN EXISTS (SELECT 1 FROM card_auth_register car WHERE car.card = cm.id AND car.auth_status = '已下发') THEN '已下发'ELSE '待下发'END AS enable_status_v
FROM card_management cm;

1.逐步讲解

2.1 基本选择

首先,我们从 card_management 表中选择所有列:

SELECT cm.*
FROM card_management cm;

这一步只是简单地选择了所有卡片的信息。

2.2 添加 CASE 语句

接下来,我们添加一个 CASE 语句来决定 enable_status_v 的值:

CASE WHEN EXISTS (SELECT 1 FROM card_auth_register car WHERE car.card = cm.id AND car.auth_status = '已下发') THEN '已下发'ELSE '待下发'
END AS enable_status_v

2.3解释 CASE 语句

  • CASE: 开始一个条件判断。
  • WHEN EXISTS: 检查是否存在满足条件的记录。
    • 子查询部分 (SELECT 1 FROM card_auth_register car WHERE car.card = cm.id AND car.auth_status = '已下发'):这个子查询用于检查 card_auth_register 表中是否存在与 card_management 表中的当前卡片 (cm.id) 对应且 auth_status 为 “已下发” 的记录。
    • SELECT 1:子查询的作用仅仅是检查存在性,因此我们不需要实际返回什么数据,1 只是一个占位符。
  • THEN '已下发': 如果子查询返回了至少一条记录(即存在这样的记录),那么 enable_status_v 的值为 “已下发”。
  • ELSE '待下发': 如果子查询没有返回任何记录,那么 enable_status_v 的值为 “待下发”。
  • END AS enable_status_v: 结束 CASE 语句,并命名结果字段为 enable_status_v

2.4完整查询

把所有部分组合起来:

SELECT cm.*, CASE WHEN EXISTS (SELECT 1 FROM card_auth_register car WHERE car.card = cm.id AND car.auth_status = '已下发') THEN '已下发'ELSE '待下发'END AS enable_status_v
FROM card_management cm;

2.5查询结果

执行上述查询后,我们会得到如下结果:

idcard_nameenable_status_v
1Card A已下发
2Card B待下发
3Card C待下发

2.结论

通过使用子查询和 CASE 语句,我们可以在 MySQL 中实现复杂的逻辑判断。这种方法不仅灵活,而且在处理包含多表关联的复杂查询时非常高效。希望这篇文章能帮助你更好地理解和应用 MySQL 的高级查询功能。

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

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

相关文章

DDD领域应用理论实践分析回顾

目录 一、DDD的重要性 (一)拥抱互联网黑话(抓痛点、谈愿景、搞方法论) (二)DDD真的重要吗? 二、领域驱动设计DDD在B端营销系统的实践 (一)设计落地步骤 &#xff0…

详解 Flink 的常见部署方式

一、常见部署模式分类 1. 按是否依赖外部资源调度 1.1 Standalone 模式 独立模式 (Standalone) 是独立运行的,不依赖任何外部的资源管理平台,只需要运行所有 Flink 组件服务 1.2 Yarn 模式 Yarn 模式是指客户端把 Flink 应用提交给 Yarn 的 ResourceMa…

Ansys Mechanical|使用Trace Mapping建立PCB板的有限元模型

Trace Mapping需要使用ECAD的方法 传统方法 vs ECAD方法 传统方法既繁琐又费时。以下是一些数据: 导出电路板布局的step文件大约需要30分钟。 导入Ansys SpaceClaim中大约需要10分钟。 进行布尔运算和共享拓扑操作大约需要24小时甚至更久。 而ECAD方法更加快速且…

剧本新纪元:探索短剧系统的魔力

在现代社会,随着科技的迅猛进步和生活节奏的不断加快,传统的长篇电视剧和电影已不能完全满足所有人的需求。短剧,由于其简短、快速、直接的特性,正在逐步成为一种文化新趋势。短剧系统正是这一趋势的典型代表,它以独特…

自己用pip下载好模块啦,但是在pycharm里面不显示?

问题: 今天在cmd里面用pip命令安装第三方模块,最后用pip list 命令发现已经成功安装,但是在pycharm里面用该模块的时候,还是爆红,显示没有该库 。 解决方法: 第一种(项目刚创建)&am…

项目问题24/5/29需求:用一路IO口捕获外界方波PWM频率,将捕获值实时传入,使得正弦波频率和外界方波频率一致

问题 STM32F103控制下,定时器3的捕获PWM模式下的中断里的全局变量psc 20,中断触发后,主函数while循环里TIM1_PWM_Init(1451,psc)函数初始化正弦波,用了中断传过来的全局变量psc后,为什么PWM频率不是PWM 72000000.0 / ((145 * (psc11))24.8…

常用的bit位操作

#ifndef BIT_IS_1 #define BIT_IS_1(value,bitpos) (((value)&(1<<(bitpos)))>>(bitpos)) //判断某1位是1还是0 #endif #ifndef GET_BIT #define GET_BIT(value,bitpos) ((value)&(1<<(bitpos))) //读取指定位置bit位的值 #endif #ifndef REV_BIT…

如何学习软件测试,并成功找到工作

在IT行业日益繁荣的今天&#xff0c;软件测试作为确保软件质量的关键环节&#xff0c;越来越受到企业的重视。对于初入职场的小白来说&#xff0c;掌握软件测试技能不仅能够帮助他们快速适应工作&#xff0c;还能为未来的职业发展奠定坚实的基础。本文将为职场小白推荐学习软件…

PHP数组排序方法及应用场景分析

在PHP编程中&#xff0c;数组是一种非常常见的数据结构&#xff0c;而对数组进行排序是经常需要处理的任务之一。PHP提供了多种方法来对数组进行排序&#xff0c;包括按值排序、按键排序、自定义排序等。本文将从多个角度对PHP数组排序方法进行详细介绍&#xff0c;并探讨不同排…

NVIDIA DeepStream SDK 说明及链接

NVIDIA DeepStream SDK DeepStream 的多平台支持为您提供了一种更快、更简单的方式来开发视觉AI应用程序和服务。您甚至可以在本地、边缘和云中部署它们&#xff0c;只需单击一个按钮。 开始 在Launchpad上试用 什么是 NVIDIA DeepStream&#xff1f; NVIDIA 的 DeepStream …

公交车载视频监控系统解决方案

公交车载视频监控系统基于iVMS-7200移动视频监控管理平台&#xff0c;通过3G/4G网络接入车载前端&#xff0c;实现实时监控、录像回放、GIS地图定位、轨迹回放、设备状态查询、紧急报警等功能。 车载前端包含车载硬盘录像机(简称车载DVR或MDVR)、车载专用摄像机、车载LCD显示屏…

50.Python-web框架-Django中引入静态的bootstrap样式

目录 Bootstrap 官网 特性 下载 在线样例 Bootstrap 入门 Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 在django中使用bootstrap 新建static\bootstrap5目录&#xff0c;解压后的Bootstrap文件&#xff0c;拷贝项目里就好。 在template文件里引用css文…

SQL-窗口函数合集

目录 1.窗口函数简介2.窗口的定义3.相关题目示例3.1 PERCENT_RANK()2346 以百分比计算排名 3.2 FIRST_VALUE()/LAST_VALUE()/NTH_VALUE()2388 将表中的空值更改为前一个值 1.窗口函数简介 MySQL 开窗函数&#xff08;Window Functions&#xff09;是 MySQL 8.0 版本引入的一个…

k8s metrics-server服务监控pod 的 cpu、内存

项目场景&#xff1a; 需要开启指标服务&#xff0c;依据pod 的 cpu、内存使用率进行自动的扩容或缩容 pod 的数量 解决方案&#xff1a; 下载 metrics-server 组件配置文件&#xff1a; wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/…

植物大战僵尸杂交版 MacBook 苹果电脑下载安装详细教程

最近老是看到别人玩植物大战僵尸杂交版&#xff0c;可是找了一圈发现都是PC版本的&#xff0c;原来游戏作者只做了一个PC版本&#xff0c;还好最终没有放弃终于在 Mac 上安装上了植物大战僵尸杂交版 版本是 2.0.88 真的蛮好玩的就是关卡有亿点点难&#xff0c;我最爱玩无尽模式…

一站式解决ComfyUI安装、调试和界面操作,附安装包 C001

点击打开以上网页&#xff0c;页面往下拉&#xff0c;找到“Direct link to download”&#xff0c;点击即可下载官方安装包。 下载完成后&#xff0c;将安装包移动到你想要安装的地方&#xff0c;解压&#xff08;推荐使用7-Zip&#xff09;&#xff0c;然后点击“run_nvidia_…

C++中的观察者模式

目录 观察者模式&#xff08;Observer Pattern&#xff09; 实际应用 股票价格监控系统 发布-订阅系统 总结 观察者模式&#xff08;Observer Pattern&#xff09; 观察者模式是一种行为型设计模式&#xff0c;它定义了对象间的一对多依赖关系。当一个对象的状态发生改变…

无需插件脚本,IDEA配置多服务一键启动

分享本教程的初衷是本人在本地调试时业务场景中需要调用多个服务&#xff0c;并且每次为了找到需要启动的服务花了很多不必要的时间&#xff0c;我相信很多同为开发的小伙伴也有和我一样的困扰。但是学会这招后多个服务需要同时启动时仅需一键即可搞定。接下来让我们一步步设置…

C++方法封装成dll及C#调用示例

1,编译生成dll时可能出现错误&#xff0c;解决办法&#xff1a;pch.h文件头部&#xff0c;添加声明 #define _CRT_SECURE_NO_WARNINGS 2, c头文件声明 extern "C" __declspec(dllexport) char* getvalue(const char * param1, const char * param2); 3, c方法实现…

【PasteSpider】的集群组件【PasteCluster】(让你的项目快速支持集群模式)的思路及实现(含源码)

PasteSpider是什么? 一款使用.net编写的开源的Linux容器部署助手&#xff0c;支持一键发布&#xff0c;平滑升级&#xff0c;自动伸缩&#xff0c;Key-Value配置&#xff0c;项目网关&#xff0c;环境隔离&#xff0c;运行报表&#xff0c;差量升级&#xff0c;私有仓库&…