sql - "NOT IN"带有前导通配符的子查询

标签 sql postgresql subquery wildcard

我有两个表:

tablefoo 包含一列 fulldata
tablebar 包含一列 partialdata

我想找到 tablefoo.fulldata 的列表,它在 tablebar.partialdata 中没有部分匹配。

下面提供了 tablefoo.fulldata 的列表,在 tablebar 中有部分匹配,但我想要这个的否定。

select fulldata from tablefoo
where fulldata like any (select '%' || partialdata from tablebar); 

这列出了 partialdata 中的每条记录:

select fulldata from tablefoow
where partialdata not in (select '%' || partialdata from tablebar);

知道如何只获取不包含与前导通配符 tablebar.partialdata 匹配的结果 tablefoo.fulldata 吗?

我找到了这个链接:PostgreSQL 'NOT IN' and subquery这似乎是朝着正确的方向前进,但我没有让它与通配符一起工作。

当然,我可以编写一个脚本将其从 psql 中提取出来并进行比较,但将其全部作为查询的一部分进行处理会好得多。

最佳答案

SELECT fulldata
FROM   tablefoo f
WHERE  NOT EXISTS (
   SELECT 1
   FROM   tablebar b
   WHERE  f.fulldata LIKE ('%' || b.partialdata)
   );

关于sql - "NOT IN"带有前导通配符的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23615483/

相关文章:

sql - 无法像@{file.sql} oracle sqlplus 语法那样从 SQL Server 查询管理器执行 SQL 脚本?

php - 显示两个 SQL 表中的数据语法解释

c# - 如何正确使用 ExecutionStrategy?

sql - 使用 CURRENT_TIMESTAMP 查询时间戳分区表的效率

mysql - 如何通过检查两列值来获取每组的最高值

mysql - 如果 (SELECT...) = 0 插入。在MySql中

sql - 应该使用什么类型的 Transaction IsolationLevel 来忽略插入但锁定选定的行?

sql - ER 关系数据库编码包含弱实体

postgresql - Docker compose 和 postgres 官方镜像环境变量

mysql - 计算查询结果