Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择一个表中不在另一个模式匹配表中的记录_Sql_Regex_Postgresql - Fatal编程技术网

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就一次!可能是必要的。