SQL找到类似的内容

时间:2018-03-15 21:09:00

标签: sql postgresql

我有表ITEMS和列URL。我需要的只是在items.url中找到类似的行:

两个相似行的示例:

ITEM_ID  |    URL    
1        | www.google.com/test1/test2/test3.php       
2        | www.yahoo.com/test1/test2/test3.php
3        | www.google.com/test5.php
4        | www.facebook.com/test5.php

正如您所看到的,URL与JUST具有不同的域名。

我的查询应该是:

SELECT * FROM ITEMS
WHERE URL LIKE `%google.com%`...
AND `here code probably` ???

我的查询应该返回ITEM_ID 2和4

1 个答案:

答案 0 :(得分:2)

您可以按照从' /'开始的子字符串进行分组字符,并获取组中的最大ID。使用postgresql语法,它应该如下所示:

SELECT *
  FROM ITEMS t
 WHERE t.item_id IN (SELECT MAX(s.item_d)
                       FROM ITEMS s
                      GROUP BY SUBSTRING(s.url FROM POSITION('/' IN s.url)))
 ORDER BY t.item_id;

更新:如果您只想要在不同域上具有相似行的Google域名,则可以使用过滤器EXISTS:

SELECT *
  FROM ITEMS t
 WHERE t.url LIKE 'www.google.com%'
   AND EXISTS (SELECT 1
                 FROM ITEMS s
                WHERE s.url NOT LIKE 'www.google.com%'
                  AND SUBSTRING(t.url FROM POSITION('/' IN t.url)) =
                      SUBSTRING(s.url FROM POSITION('/' IN s.url)));