我分别有两个表temp和md。有一个名为uri_stem的字段,它有一些我要从temp而不是md中省略的细节。我需要做一个能够比较某些模式的比较,如果md中有类似的模式,则从temp中删除它们。
现在我正在使用此代码删除类似于我想要省略的模式的数据,但我想要一些方法能够比较md表中的模式而不是我对每个模式进行压缩。希望解释清楚。
FROM
spfmtr01.tbl_1c_apps_log_temp
where
uri_stem not like '%.js' and
uri_stem not like '%.css' and
uri_stem not like '%.gif'
and uri_stem not like '%.png'
and uri_stem not like '%.html'
and uri_stem not like '%.jpg'
and uri_stem not like '%.jpeg'
and uri_stem not like '%.ico'
and uri_stem not like '%.htm'
and uri_stem not like '%.pdf'
and uri_stem not like '%.Png'
and uri_stem not like '%.PNG'
答案 0 :(得分:0)
此示例基于我在评论中提到的answer。
示例数据:
drop table if exists a, b;
create table a (testedstr varchar);
create table b (condstr varchar);
insert into a values
('aa.aa.jpg'),
('aa.aa.bjpg'), -- no match
('aa.aa.jxpg'), -- no match
('aa.aa.jPg'),
('aa.aa.aico'), -- no match
('aa.aa.ico'),
('bb.cc.dd.icox'), -- no match
('bb.cc.dd.cco'); -- no match
insert into b values ('jpg'), ('ico');
说明:
a
中的testedstr
列中)b
中的condstr
列中)SQL:
with cte as (select '\.(' || string_agg(condstr,'|') || ')$' condstr from b)
select * from a, cte where testedstr !~* condstr;
说明:
jpg|ico
字符串(聚合为单行)。\.(jpg|ico)$
对于旧版本,您应该使用@Bohemian提供的答案。对于我的样本数据,它看起来像(根据多个可能的点调整)(SQLFiddle:
)select
*
from
a
where
lower(reverse(split_part(reverse(testedstr),'.',1)))
not in (select lower(condstr) from b)
没有reverse
函数(SQLFiddle):
select
*,
lower(split_part(testedstr,'.',length(testedstr)- length(replace(testedstr,'.','')) + 1)) as extension
from
a
where
lower(split_part(testedstr,'.',length(testedstr)- length(replace(testedstr,'.','')) + 1)) not in (select lower(condstr) from b)
答案 1 :(得分:0)
首先让我们将许多条件重构为一个:
where lower(substring(uri_stem from '[^.]+$')) not in ('js', 'css', 'gif', 'png', 'html', 'jpg', 'jpeg', 'ico', 'htm', 'pdf')
在这种形式中,很容易看出如何选择值列表而不是编码:
where lower(substring(uri_stem from '[^.]+$')) not in (
select lower(somecolumn) from sometable)
注意使用lower()来避免处理大小写的问题。
您也可以将其编码为连接:
select t1.*
from mytable t1
left join sometable t2
on lower(somecolumn) = lower(split_part(uri_stem, '.', 2))
where t2.somecolumn is null -- filter out matches