我有一个很大的URL数据库,还有一个拖尾斜杠的副本。我希望找到那些以尾随斜杠结尾的urls的重复值,但不希望在拖尾斜杠之后找到带有文本的urls,例如http://www.google.com/asdfasdf。
CREATE TABLE link_info (
id INT,
url VARCHAR(32)
);
INSERT INTO link_info VALUES
(1, 'http://www.yahoo.com/'),
(2, 'http://www.google.com/'),
(3, 'http://www.google.com/asdfasdf'),
(4, 'http://www.yahoo.com');我正在尝试选择不带尾斜杠的重复项,但是它选择http://www.google.com/asdfasdf作为副本。
SELECT DISTINCT TRIM(TRAILING '/' FROM url) url
FROM link_info我本来希望使用regexp的,但那不管用。
SELECT DISTINCT TRIM(TRAILING REGEXP('[/]$') FROM url) url
FROM link_info发布于 2014-02-17 19:58:08
您的查询将返回修剪过的每个url。我想你需要这样的东西:
SELECT TRIM(TRAILING '/' FROM url) trimmed_url
FROM link_info
GROUP BY trimmed_url
HAVING COUNT(DISTINCT url)>1请看小提琴这里。
编辑
如果没有确切的重复项,并且只想保持行不带尾斜杠,则可以使用以下delete查询:
DELETE l1.*
FROM
link_info l1 INNER JOIN link_info l2
ON l1.url = CONCAT(l2.url, '/')请看小提琴这里。请注意,此查询将只删除带有尾斜杠的复制的yahoo.com,但不会删除www.google.com/中的尾斜杠。
发布于 2014-02-17 19:56:57
你可以用这个
SELECT TRIM(TRAILING '/' FROM url) url
FROM link_info
group by SUBSTRING_INDEX(url, '.com', 1)但是,这只在具有.com的链接中起作用,所以对于.net或.something,您可以添加一个联合。
这里的演示
发布于 2014-02-17 20:12:18
尝试:
select *
from link_info
where url in
(select url
from link_info
group by case
when replace(url, substring_index(url, '.', 1), '') like '%/' then
replace(url, substring_index(url, '.', 1), '')
else
concat(replace(url, substring_index(url, '.', 1), ''),
'/')
end
having count(*) > 1)https://stackoverflow.com/questions/21837902
复制相似问题