我有一个使用子查询生成的简单表,该子查询应用了许多不同的过滤器。
| project
1 | Hello
2 | Hello 2.0
3 | Ordinary Sheep
4 | Sheep
下一步是删除名称非常相似的项目(例如,如果一个项目具有相同的名称,但后跟一个2.0)。
在这种情况下,我需要查询从结果中删除Project 2.0
。这个小问题比我预期的更具挑战性。
我最好的选择似乎是在这里正确地识别应该排除的项目,但是如果我反转操作,由于自我联接,最终会得到重复的数据。
SELECT
q1.name,
q2.name
FROM subquery q1
JOIN subquery q2 ON q1.name LIKE q2.name || '%'
WHERE q1.id <> q2.id;
非常感谢您!
答案 0 :(得分:1)
也许您可以匹配项目中第一个出现的数字并排除之后的所有内容。然后在其上应用RTRIM
和DISTINCT
。但是,如果项目名称本身包含数字,则此方法将无效。
with s as
(
--your query that you have inside sub-query
)
select DISTINCT RTRIM(regexp_replace(project, '^([^\d]+)\d.*$','\1')) from s;