Sql 选择一个表中不在另一个模式匹配表中的记录
我希望在一个表的列中查找不在另一个表的列中的所有记录。我可以通过以下查询执行此操作:Sql 选择一个表中不在另一个模式匹配表中的记录,sql,regex,postgresql,Sql,Regex,Postgresql,我希望在一个表的列中查找不在另一个表的列中的所有记录。我可以通过以下查询执行此操作: SELECT kywd FROM from_client WHERE kywd NOT IN (SELECT kywd FROM from_me); 然而,我想扩展它以允许一些模式匹配。至少我想看看来自客户端的是否出现在来自客户端的中的任何位置。所以,就像,“%kywd%”。我尝试了…其中“%”kywd“%
SELECT
kywd
FROM
from_client
WHERE
kywd NOT IN
(SELECT
kywd
FROM
from_me);
然而,我想扩展它以允许一些模式匹配。至少我想看看来自客户端的是否出现在来自客户端的中的任何位置。所以,就像,“%kywd%”
。我尝试了…其中“%”kywd“%”不在
。。。作为一种猜测,实际上返回了一个结果集,但我怀疑这种语法只是胡说八道
如何使这个select语句允许使用这些通配符?请尝试使用这些方法
SELECT
kywd
FROM
from_client
LEFT OUTER JOIN from_me ON
from_client.kywd like from_me.kywd -- replace with whatever appropriate
WHERE
from_me.some_id IS NULL
“替换为任何适当的”,我的意思是:
from_client.kywd,如“%”| | | from_me.kywd |‘%”
或
from_me.kywd,如“%”| | from_client.kywd | |“%”
或任何其他适当的条件。您可以尝试使用该语句。在你的场景中会是这样的
SELECT from_client.kywd
FROM from_client
LEFT JOIN from_me
ON from_client.kywd LIKE '%' || from_me.kywd || '%'
WHERE from_me.kywd IS NULL
SELECT kywd
FROM from_client
--WHERE <Conditions here>
except
SELECT kywd
FROM from_me
--WHERE <Conditions here>
选择kywd
来自您的客户
--在哪里
除了
选择kywd
从我这里
--在哪里
并返回from_客户端中存在但from_me中不存在的内容。不存在
可能比join快
select kywd
from from_client
where not exists (
select 1
from from_me
where position(from_client.kywd, kywd) > 0
)
这是一次性操作,还是性能很重要?@ErwinBrandstetter就一次!可能是必要的。