mysql 不允许重复时修剪text/varchar列

fnatzsnv  于 2023-04-05  发布在  Mysql
关注(0)|答案(1)|浏览(109)

所以我有一个mysql表,就像上面的那个,其中列Product
| ID|产品名称|
| --------------|--------------|
| 1|文本1|
| 第二章|text1 \n|
| 三|文本2|
| 四|文本3|
| 五|text4 \n|
我的问题是,我不是很聪明-并介绍了大量的产品,我的表与一个新的一行结束。与以下查询我想通了,我有200 k+行与一个新的一行:
SELECT * FROMmy_product_tableWHEREProduct_NameREGEXP "\n"
我正在寻找一种方法来修剪-所有的“产品名称”与一个换行符,如果另一个产品与确切的名称不存在已经-如果它已经退出,我只想删除它。
我想最简单的方法就是:
1.修剪所有可能的行-因为如果存在重复的行,它将抛出错误,所以不会发生任何事情
1.在所有可能的东西都被修剪后-删除其余的
第2步应该很容易,只要修改我上面的查询-但我的MYSQL知识是可悲的缺乏一点,当我尝试第1步。这是这样做吗?甚至是可能的?

  • 编辑 * 我想我不清楚新行,我不知道如何在堆栈上的表中写入它,但请参阅此图像https://imgur.com/a/1d4WI5z-这就是“新行”的重复值的样子
rkkpypqq

rkkpypqq1#

您可以首先消除重复项,然后更新其余项

CREATE TABLE Table1
    (`ID` int, `Product_Name` varchar(8))
;
    
INSERT INTO Table1
    (`ID`, `Product_Name`)
VALUES
    (1, 'text1'),
    (2, 'text1 \n'),
    (3, 'text2'),
    (4, 'text3'),
    (5, 'text4 \n')
;
Records: 5  Duplicates: 0  Warnings: 0
DELETE FROM Table1
WHERE `Product_Name` LIKE '%\n'
AND EXISTS ( SELECT 1 FROM (SELECT * FROM Table1) t2 
  WHERE t2.`Product_Name` = TRIM(REPLACE(Table1.`Product_Name`,'\n','')));
UPDATE Table1 SET `Product_Name` = TRIM(REPLACE(`Product_Name`,'\n','')) WHERE `Product_Name` LIKE '%\n'
Rows matched: 1  Changed: 1  Warnings: 0
SELECT * FROM Table1
ID产品名称
1文本1
文本2
文本3
文本4

fiddle
万一你也有cr lf或cr单独

CREATE TABLE Table1
    (`ID` int, `Product_Name` varchar(8))
;
    
INSERT INTO Table1
    (`ID`, `Product_Name`)
VALUES
    (1, 'text1'),
    (2, 'text1 \n'),
    (3, 'text2'),
    (4, 'text3'),
    (5, 'text4 \n'),
  (6, 'text1 \r'),
  (7, 'text1 \r\n')
;
Records: 7  Duplicates: 0  Warnings: 0
DELETE FROM Table1
WHERE `Product_Name` LIKE '%\n' OR `Product_Name` LIKE '%\r' OR `Product_Name` LIKE '%\r\n'
AND EXISTS ( SELECT 1 FROM (SELECT * FROM Table1) t2 
  WHERE t2.`Product_Name` = TRIM(REPLACE(REPLACE(REPLACE(Table1.`Product_Name`,'\r\n',''),'\r',''),'\n','')));
UPDATE Table1 SET `Product_Name` = TRIM(REPLACE(REPLACE(REPLACE(`Product_Name`,'\r\n',''),'\r',''),'\n','')) 
  WHERE `Product_Name` LIKE '%\n' OR `Product_Name` LIKE '%\r' OR `Product_Name` LIKE '%\r\n'
Rows matched: 0  Changed: 0  Warnings: 0
SELECT * FROM Table1
ID产品名称
1文本1
文本2
文本3

fiddle

相关问题