首页 > 解决方案 > 如何通过比较重复字符串来更新sql记录?

问题描述

我有一个下表:

id   |  echantillon_dta  |   Est_en_double 
1    |   Bonjour         |      null
2    |   Bonjour         |      null
3    |   Bonjour         |      null
4    |   Joke            |      null
5    |   Joke            |      null
6    |                   |      null 

处理后查询将显示如下:

id   |   echantillon_dta        |   Est_en_double 
1    |   Bonjour         |      1
2    |   Bonjour         |      1 
3    |   Bonjour         |      1 
4    |   Joke            |      4
5    |   Joke            |      4
6    |                   |      null 

如何比较字符串与字符串?以及如何像这样更新列?

标签: sql

解决方案


min(id)您可以在 Record_Details 相同时使用更新。

并且有一个错误的描述:
6 | Nope | 6 //No duplicates found, stay null
id 6 没有重复,但isDuplicate column值是 6,不是null吗?
所以我having count(1) > 1习惯爱它。

CREATE TABLE Table1
  ("id" int, "Record_Details" varchar2(11), "isDuplicate" varchar2(4))
;
INSERT ALL 
  INTO Table1 ("id", "Record_Details", "isDuplicate")
       VALUES (1, 'Hello World', NULL)
  INTO Table1 ("id", "Record_Details", "isDuplicate")
       VALUES (2, 'Hello World', NULL)
  INTO Table1 ("id", "Record_Details", "isDuplicate")
       VALUES (3, 'Hello World', NULL)
  INTO Table1 ("id", "Record_Details", "isDuplicate")
       VALUES (4, 'Joke', NULL)
  INTO Table1 ("id", "Record_Details", "isDuplicate")
       VALUES (5, 'Joke', NULL)
  INTO Table1 ("id", "Record_Details", "isDuplicate")
       VALUES (6, 'Nope', NULL)
SELECT * FROM dual
;
update (
  select T.*
     , (select min("id") 
        from Table1 Tmp 
        where Tmp."Record_Details" = T."Record_Details"
        group by Tmp."Record_Details" having count(1) > 1 --No duplicates found, stay null

     ) as "new_isDuplicate"
  from Table1 T
)
set "isDuplicate" = "new_isDuplicate"
6 行受影响
select * from Table1
编号 | 记录_详情 | 是重复的
-: | :------------- | :----------
 1 | 你好世界 | 1          
 2 | 你好世界 | 1          
 3 | 你好世界 | 1          
 4 | 笑话 | 4          
 5 | 笑话 | 4          
 6 | 没有 | 空值       

db<>在这里摆弄


推荐阅读