Re: replacing a subquery with an outer join?

From: Gavin Flower <GavinFlower(at)archidevsys(dot)co(dot)nz>
To: chris(at)chriscurvey(dot)com
Cc: pgsql <pgsql-general(at)postgresql(dot)org>
Subject: Re: replacing a subquery with an outer join?
Date: 2011-07-22 01:45:40
Message-ID: 4E28D644.3030804@archidevsys.co.nz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 22/07/11 13:20, Chris Curvey wrote:
> in an earlier thread, the following query was submitted:
>
> SELECT COUNT(*) FROM q
> WHERE NOT EXISTS (SELECT 1
> FROM t AS t
> WHERE t.mid = q.mid);
>
>
> and as part of his answer, David Johnson responded
>
>
> 3. Also, you are using a correlated sub-query instead of a LEFT
> OUTER JOIN
>
>
> This interests me. How would you rewrite the correlated subquery
> above using the outer join?
>
> --
> e-Mail is the equivalent of a postcard written in pencil. This
> message may not have been sent by me, or intended for you. It may
> have been read or even modified while in transit. e-Mail disclaimers
> have the same force in law as a note passed in study hall. If your
> corporate attorney says that you need an disclaimer in your signature,
> you need a new corporate attorney.

DROP TABLE IF EXISTS q;
DROP TABLE IF EXISTS t;

CREATE TABLE q
(
mid int PRIMARY KEY,
qnote text
);

CREATE TABLE t
(
mid int PRIMARY KEY,
tnote text
);

INSERT INTO q (mid, qnote) VALUES
(1, 'first'),
(2, 'second'),
(4, 'fourth');

INSERT INTO t (mid, tnote) VALUES
(1, 'first'),
(3, 'third');

SELECT
COUNT(*)
FROM
q LEFT OUTER JOIN t ON (q.mid = t.mid)
WHERE
t.mid IS NULL;

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2011-07-22 02:08:03 Re: replacing a subquery with an outer join?
Previous Message Chris Curvey 2011-07-22 01:20:21 replacing a subquery with an outer join?