当前位置: 首页 > news >正文

省市县相关校验sql随笔

1.层级校验

要判断一个给定的省、市、区(县)名字是否符合正确的层级关系,假设你的表结构如下:

CREATE TABLE regions (id INT PRIMARY KEY,name VARCHAR(255),parent_id INT,  -- 指向上一级区域的id,例如市的parent_id指向省的id,区的parent_id指向市的idlevel VARCHAR(50)  -- 标记层级,可能的值:'province', 'city', 'district'
);

则可以这么写

SELECT CASE WHEN d.id IS NOT NULL AND c.id IS NOT NULL AND p.id IS NOT NULL AND d.parent_id = c.id AND c.parent_id = p.id THEN '符合层级关系'ELSE '不符合层级关系'END AS result
FROM regions d
JOIN  regions c ON d.parent_id = c.id AND c.level = 'city'
JOIN  regions p ON c.parent_id = p.id AND p.level = 'province'
WHERE d.name = '给定的区名' AND c.name = '给定的市名' AND p.name = '给定的省名' AND d.level = 'district';

查询逻辑

1.自联结:通过 parent_id 字段与同一表中的其他记录联结,以找到区、市、和省的正确层级关系。
2.联结条件:
        d.parent_id = c.id:区的 parent_id 应该等于市的 id。
        c.parent_id = p.id:市的 parent_id 应该等于省的 id。
    WHERE 子句:指定区、市、和省的名字和层级。

可能不走ELSE,可以把JOIN换成LEFT JOIN,通过将 c.regionName = 'xxx'p.regionName = 'xxx' 的条件放在 LEFT JOIN 中,可以避免 WHERE 子句排除掉非匹配的行,从而确保 ELSE 分支能被正确触发。

2.地址校验

查出产品地址是不含"西藏"的产品个数,假如有产品表:product,地址字段:addressName,

地址样例:专供(不含海南、西藏、北京)

给定的省名:西藏自治区

SELECTcount(1)
FROM  product pd
WHERE EXISTS(SELECTCASE  WHEN d.id IS NOT NULL AND c.id IS NOT NULL AND p.id IS NOT NULL  AND   d.parentId  = c.id AND c.parentId = p.id THEN '1' ELSE '0' END AS resultFROM  regions dJOIN  regions c ON d.parent_id = c.id AND c.level = 'city'JOIN  regions p ON c.parent_id = p.id AND p.level = 'province'WHEREd.level = 'district'AND d.regionName   LIKE CONCAT('%', '给定的区名', '%')AND c.regionName   LIKE CONCAT('%', '给定的市名', '%')AND p.regionName   LIKE CONCAT('%', '给定的省名', '%')AND pd.addressName LIKE CONCAT('%不含%', SUBSTRING('给定的省名', 1, 2), '%'))

http://www.lryc.cn/news/433210.html

相关文章:

  • uniapp ios sticky定位,内部 u-tabs(包含scroll-view)消失问题
  • web群集--nginx配置文件location匹配符的优先级顺序详解及验证
  • Vivado编译报错黑盒子问题
  • 【建造者模式】
  • 自动化表格处理的革命:智能文档系统技术解析
  • 【Hot100】LeetCode—394. 字符串解码
  • 12. 如何在MyBatis中进行分页查询?常见的分页实现方式有哪些?
  • @[TOC](力扣题目-滑动窗口-qsort排序-二分法查找)
  • Docker容器相关命令
  • 【老课推荐】基于LangChain和知识图谱的大模型医疗问答机器人项目
  • Adobe Sensei——自动化视频编辑、特效应用和素材增强,通过AI技术快速优化视频内容,自动修复视频质量、自动添加背景音乐或字幕
  • 【AIGC数字人】EchoMimic:基于可编辑关键点条件的类人音频驱动肖像动画
  • 变量数据类型 Day3
  • SpringBoot2:请求处理原理分析-RESTFUL风格接口
  • [Linux][配置]Linux修改history存储的最大记录数
  • 代码随想录 刷题记录-28 图论 (5)最短路径
  • 大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
  • C++复习day04
  • [苍穹外卖]-04菜品管理接口开发
  • gitlab 启动/关闭/启用开机启动/禁用开机启动
  • 中间件解析漏洞(附环境搭建教程)
  • matlab实现kaiser窗+时域采样序列(不管原信号拉伸成什么样子)是一样的,变到频谱后再采样就是一样的频域序列。
  • git为不同的项目设置不同的提交作者
  • 防爆定位信标与防爆定位基站有什么区别?
  • QT 编译报错:C3861: ‘tr‘ identifier not found
  • 谈谈ES搜索引擎
  • 【MySQL】MySQL基础
  • Spring中Bean的相关注解
  • Golang | Leetcode Golang题解之第385题迷你语法分析器
  • 【Java 优选算法】双指针(上)