测试此查询
CREATE TEMPORARY table Kratika
(
_id int,
_value varchar(50)
);
INSERT INTO Kratika
SELECT 1, '1111222255' UNION
SELECT 2, '1111222 255' UNION -- duplicate
SELECT 3, '11112222 55' UNION -- duplicate
SELECT 4, '1111222233'; -- not duplicate
SELECT * FROM Kratika;
DELETE FROM Kratika WHERE _value <> REPLACE(_value, ' ', '') ;
SELECT * FROM Kratika;
输出
1 1111222255
2 1111222 255
3 11112222 55
4 1111222233
-- Select after deletion of duplicate records
1 1111222255
4 1111222233
编辑
如果您没有问题while循环,那么你可以测试这个(我不是一个MySQL开发人员,我不知道为什么MySQL的不是让我写while循环,所以创建PROC为同)
DROP PROCEDURE IF EXISTS test_kratik;
delimiter ##
CREATE PROCEDURE test_kratik
(
)
BEGIN
DROP table IF EXISTS Kratika;
CREATE TEMPORARY table Kratika
(
_id int,
_value varchar(50)
);
INSERT INTO Kratika
SELECT 1, '1111222255' UNION
SELECT 2, '1111222 255' UNION -- duplicate
SELECT 3, '11112222 55' UNION -- duplicate
SELECT 4, '1111222233'; -- not duplicate
SELECT * FROM Kratika;
SET @ID := 0;
SET @DUP_ID := 0;
SET @value := '';
WHILE @ID <= (SELECT MAX(_id) FROM kratika) DO
BEGIN
IF EXISTS(SELECT _id from kratika WHERE _id = @ID) THEN
BEGIN
SET @value = (SELECT REPLACE(_value, ' ', '') from kratika WHERE _id = @ID);
DELETE FROM kratika
WHERE REPLACE(_value, ' ', '') = @value
AND _id <> @ID;
END;
END IF;
SET @ID = @ID + 1;
END;
END WHILE;
UPDATE kratika
SET _value = REPLACE(_value, ' ', '')
WHERE _value <> REPLACE(_value, ' ', '') ;
SELECT * FROM kratika;
END ##
delimiter ;
CALL test_kratik();
更新这将是很好,如果你不想while循环使用....
DROP TABLE IF EXISTS Kratika;
CREATE TEMPORARY table Kratika
(
_id int,
_value varchar(50)
);
INSERT INTO Kratika
SELECT 1, '1111222255' UNION
SELECT 2, '1111222 255' UNION -- duplicate
SELECT 3, '11112222 55' UNION -- duplicate
SELECT 4, '111122 2233'; -- not duplicate
DROP TABLE IF EXISTS copy_temp;
CREATE TEMPORARY table copy_temp
(
_id1 int,
_value1 varchar(50)
);
INSERT INTO copy_temp
SELECT _id, _value FROM kratika;
SELECT * FROM Kratika;
DELETE FROM Kratika
WHERE _id <> (SELECT _id1 FROM copy_temp
WHERE REPLACE(_value, ' ', '') = REPLACE(_value1, ' ', '')
Limit 1
);
UPDATE kratika
SET _value = REPLACE(_value, ' ', '')
WHERE _value <> REPLACE(_value, ' ', '') ;
SELECT * FROM Kratika;
输出
1 1111222255
2 1111222 255
3 11112222 55
4 1111222233
更新
1 1111222255
4 1111222233
后, '时间' 为 '编辑' 的委婉说法!?!?! – Strawberry 2013-02-11 10:18:13
您定义了一个唯一的密钥,因为您不需要重复的密钥。现在你的UPDATE语句会生成重复密钥,你正在寻找一种方法来忽略这个错误?这没有任何意义,我... – CodeZombie 2013-02-11 10:34:47
@ZombieHunter是......这是发生,因为一些数字存储与,现在我想删除像01268 20.3 ,我已经有一个不带空格01268 20.3,有我面临的问题 –
Harinder
2013-02-11 10:46:24