-
使用with as 和多个case when then 1 else 0 end
两个 表 a,b 多对多得关系 和一个中间表 c
第一个表a的data 根据第二个表b得值来更新
根据 表C
如果a对应得b得data全是1,a表得data就是1,
如果a对应得b得data全是2,a表得data就是2,
如果a对应得b得data全是1和2,a表得data就是3,
如果a对应得b得data全是0,a表得data就是0,
使用sql 进行修改值,
首先使用with as 进行效率得提高,且需要多个虚拟表,所以还需要case when 进行查询出来修改值, 最后通过update 直接修改,不用再修改的时候查询
具体代码
WITH ctable AS (
SELECT
ci.catalog_id,
ci.item_id ,
i.monitor_status i_monitor_status,
c.monitor_status c_monitor_status
FROM
data_catalog_item ci,
data_item i,
data_catalog c
WHERE
ci.item_id = i.id
AND ci.catalog_id = c.id
),
ctableFinal AS (
SELECT DISTINCT
catalog_id,
CASE
WHEN catalog_id IN ( SELECT catalog_id FROM ctable WHERE i_monitor_status = '1' )
AND catalog_id NOT IN ( SELECT catalog_id FROM ctable ct WHERE i_monitor_status = '2' ) THEN
1 ELSE
CASE
WHEN catalog_id IN ( SELECT catalog_id FROM ctable WHERE i_monitor_status = '2' )
AND catalog_id NOT IN ( SELECT catalog_id FROM ctable ct WHERE i_monitor_status = '1' ) THEN
2 ELSE
CASE
WHEN catalog_id IN ( SELECT catalog_id FROM ctable WHERE i_monitor_status = '2' )
AND catalog_id IN ( SELECT catalog_id FROM ctable ct WHERE i_monitor_status = '1' ) THEN
3 ELSE
CASE
WHEN catalog_id IN ( SELECT catalog_id FROM ctable WHERE i_monitor_status = '0' )
AND catalog_id NOT IN ( SELECT catalog_id FROM ctable ct WHERE i_monitor_status = '1' OR i_monitor_status = '2' ) THEN
0
END
END
END
END c_monitor_status_final
FROM
ctable )
UPDATE data_catalog
SET data_catalog.monitor_status = cf.c_monitor_status_final
FROM
data_catalog,
ctableFinal cf
WHERE
data_catalog.id = cf.catalog_id
AND data_catalog.monitor_status != cf.c_monitor_status_final
重点:
with 虚拟表名 as(查询语句且保存到虚拟表中),
多个虚拟表需要‘,’逗号个开 ctableFinal AS ( select * from data),且后面马上跟 insert,update,select 使用它,否则无法使用改虚拟表
select CASE WHEN catalog_id in('6') then 1 else 0 end c_data from data 格式 需要对查询出来的表进行修改值,然后直接update
select CASE WHEN 表字段 条件 then 成功为 1 else 失败为 0 end c_data 展示字段 from data 格式
distinct 去掉重复, 但是需要每一行记录需要相同数据,不能只有一个值相同
出处:
https://www.cnblogs.com/hylr/p/14593501.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式