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

省市县相关校验sql随笔

1.层级校验

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

CREATE TABLE regions (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    parent_id INT,  -- 指向上一级区域的id,例如市的parent_id指向省的id,区的parent_id指向市的id
    level 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,

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

给定的省名:西藏自治区

SELECT
	count(1)
FROM  product pd
WHERE EXISTS
	(
		SELECT
			CASE  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 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.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.kler.cn/a/301187.html

相关文章:

  • 【GPTs】Ai-Ming:AI命理助手,个人运势与未来发展剖析
  • 39.十进制数转化为二进制数 C语言
  • 【微服务】Spring AI 使用详解
  • ubuntu24.04网卡配置
  • 基于普中51单片机开发板的电子门铃设计( proteus仿真+程序+设计报告+讲解视频)
  • .NET 简介
  • 建筑物检测系统源码分享
  • linux内核驱动:ptp内核phc框架
  • rman compress
  • starrocks结合同步和异步物化视图建立数据湖和数据仓库
  • java的ReentrantLock原理
  • ARM32开发——DMA内存到内存
  • CSS实现前端布局更巧妙的方案!在 flex 布局中通过使用 margin 实现水平垂直居中以及其他常见的前端布局
  • html初体验标准标签
  • MDK平台 - 变量和函数定义绝对位置
  • RISC-V (十一)软件定时器
  • 巧用抖音关键词视频列表 API 和视频评论 API 深度解析用户互动
  • 在 Jenkins 上通过 SSH 控制 Windows 目标计算机时,出现中文乱码
  • Redis——通用命令
  • 【原创教程】自动化工程案例01:8工位插针装配机02
  • 校园管理|基于springboot+vue的校园管理系统(源码+数据库+文档)
  • Leetcode 188. 买卖股票的最佳时机 Ⅳ 状态机dp C++实现
  • MAC配置chromedriver
  • EasyExcel 学习之 导出 “类型及精度问题”
  • Tomact的基本使用
  • 中国大数据产业的融资热潮来袭,哪些领域最受资本青睐?