| From: | Vincent Elschot <vinny(at)xs4all(dot)nl> |
|---|---|
| To: | Ed Rouse <erouse(at)milner(dot)com>, "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org> |
| Subject: | Re: Finding the negative |
| Date: | 2017-07-06 19:25:20 |
| Message-ID: | e3c865da-5b87-6d64-4551-9f70659722ff@xs4all.nl |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-sql |
Op 06/07/2017 om 21:13 schreef Ed Rouse:
>
> Version 9.1.
>
> I have the following query that brings back the correct number of lobs
> still asscociated with data in other tables:
>
> select count(distinct(loid)) from pg_largeobject where (loid in
> (select content from attachments) or loid in (select content from
> idw_form_workflow_attachments));
>
> in that the loid’s in either table are found. What I need is to find
> the ones NOT in either table. I have tried using not in both with
> or/and and various parenthesis. I tried:
>
> select count(distinct(loid)) from pg_largeobject where not ((loid in
> (select content from attachments) or loid in (select content from
> idw_form_workflow_attachments)));
>
> This should work since, if the loid is not in the content of either
> table, it should be F or F = F, negated to T;
>
> which I would think would then count, but I get back 0 instead of the
> rather large number I should get. This is all a prelude to removing
> lobs that are no longer referenced.
>
> Any ideas on how to get the inverse of the working query? Thanks
>
Isn't this a case for EXCEPT, the reverse of UNION? Like in:
SELECT COUNT(*) FROM
(
SELECT foo FROM bar
EXCEPT
SELECT foo FROM cafe
)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2017-07-06 19:43:23 | Re: Finding the negative |
| Previous Message | Ed Rouse | 2017-07-06 19:13:09 | Finding the negative |