You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于分组的SQL Update:统一同一Journal下Segment的大小写格式

问题描述

系统会为每个Journal #生成两条记录:第1条由系统自动生成,第2条为用户前端录入。目前存在同一Journal #下两条记录的Segment大小写不一致的问题——第1条采用后端存储格式,第2条保留用户录入的大小写,影响后续业务流程。

当前表数据:

HMYJournal #Segment
110001House
210001HouSE
310002FLAT
410002flat
510003Unit
610003UniT

期望更新后,每个Journal #的第2条记录Segment与第1条完全一致:

HMYJournal #Segment
110001House
210001House
310002FLAT
410002FLAT
510003Unit
610003Unit

尝试过按Journal #分组取min(HMY)更新max(HMY)的Segment,以及基于前一行更新的方法,均未成功,需正确的SQL Update实现方案。

解决方案

核心思路:找到每个Journal #下HMY最小的记录(系统自动生成的第1条)的Segment值,将同Journal #下HMY最大的记录(用户录入的第2条)的Segment更新为该值。以下是不同数据库的实现代码:

MySQL

UPDATE your_table t1
JOIN (
    SELECT `Journal #`, MIN(HMY) AS min_hmy, MAX(HMY) AS max_hmy
    FROM your_table
    GROUP BY `Journal #`
) t2 ON t1.`Journal #` = t2.`Journal #`
JOIN your_table t3 ON t3.`Journal #` = t2.`Journal #` AND t3.HMY = t2.min_hmy
SET t1.Segment = t3.Segment
WHERE t1.HMY = t2.max_hmy;

SQL Server

UPDATE t1
SET t1.Segment = t3.Segment
FROM your_table t1
INNER JOIN (
    SELECT [Journal #], MIN(HMY) AS min_hmy, MAX(HMY) AS max_hmy
    FROM your_table
    GROUP BY [Journal #]
) t2 ON t1.[Journal #] = t2.[Journal #]
INNER JOIN your_table t3 ON t3.[Journal #] = t2.[Journal #] AND t3.HMY = t2.min_hmy
WHERE t1.HMY = t2.max_hmy;

Oracle

MERGE INTO your_table t1
USING (
    SELECT 
        t."Journal #",
        t.Segment,
        (SELECT MAX(HMY) FROM your_table WHERE "Journal #" = t."Journal #") AS max_hmy
    FROM your_table t
    WHERE t.HMY = (SELECT MIN(HMY) FROM your_table WHERE "Journal #" = t."Journal #")
) t2
ON (t1.HMY = t2.max_hmy AND t1."Journal #" = t2."Journal #")
WHEN MATCHED THEN
    UPDATE SET t1.Segment = t2.Segment;

注意事项

  • 将代码中的your_table替换为实际的表名
  • 针对Journal #这类含特殊字符的字段,不同数据库的转义方式不同:MySQL用反引号`,SQL Server用方括号[],Oracle用双引号""

内容的提问来源于stack exchange,提问作者Shaine321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:05:35