Question

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.

Was it helpful?

Solution

SELECT fulldata
FROM   tablefoo f
WHERE  NOT EXISTS (
   SELECT 1
   FROM   tablebar b
   WHERE  f.fulldata LIKE ('%' || b.partialdata)
   );
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top