I have two tables:

Table tablefoo contains a column fulldata.
Table tablebar contains a column partialdata.

I want find a list of tablefoo.fulldata that do NOT have partial matches in tablebar.partialdata.

The following provides a list of tablefoo.fulldata with partial matches in tablebar, but I want the negative of this.

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

This lists every record in partialdata:

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

Any idea how to get only the results tablefoo.fulldata that do not contain matches to a leading wildcarded tablebar.partialdata?

I found this link: PostgreSQL 'NOT IN' and subquery which seems like it's headed down the right path, but I'm not getting it to work with the wildcard.

Sure, I could write a script to pull this out of psql and do the comparisons, but it would be much nicer to handle this all as part of the query.

有帮助吗?

解决方案

SELECT fulldata
FROM   tablefoo f
WHERE  NOT EXISTS (
   SELECT 1
   FROM   tablebar b
   WHERE  f.fulldata LIKE ('%' || b.partialdata)
   );
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top