Re: IN or JOIN

From: Thomas F(dot)O'Connell <tfo(at)sitening(dot)com>
To: <gearond(at)fireserve(dot)net>
Cc: <pgsql-general(at)postgresql(dot)org>
Subject: Re: IN or JOIN
Date: 2004-09-27 02:35:39
Message-ID: EB643C24-102D-11D9-B9B3-000D93AE0944@sitening.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I can't imagine a scenario where the IN would be a better choice. Is
there a reason you think the JOIN is not appropriate?

-tfo

On Sep 25, 2004, at 7:20 PM, gearond(at)fireserve(dot)net wrote:

> please CC me as I am on digest
> -------------------------------
>
>
> I have three tables, simplified for, well, simplicity :-)
>
> CREATE TABLE Usrs (
> usr_id serial primary NOT NULL,
> name text NOT NULL,
> login text NOT NULL,
> CONSTRAINT PK_Usrs PRIMARY KEY (usr_id)
> );
>
> CREATE TABLE EmailAddrs (
> email_addr_id SERIAL NOT NULL,
> email_addr VARCHAR(255) NOT NULL UNIQUE,
> CONSTRAINT PK_EmailAddrs PRIMARY KEY (email_addr_id)
> );
>
> CREATE TABLE UsrEmails (
> usr_id INT4 NOT NULL,
> email_addr_id INT4 NOT NULL,
> CONSTRAINT PK_UsrEmails PRIMARY KEY (usr_id, email_addr_id)
> );
>
> ALTER TABLE UsrEmails
> ADD CONSTRAINT EmailAddrs11_0MUsrEmail
> FOREIGN KEY (email_addr_id)
> REFERENCES EmailAddrs (email_addr_id);
>
> ALTER TABLE UsrEmails
> ADD CONSTRAINT UsrEmailTypes11_0MUsrEmails
> FOREIGN KEY (usr_email_type_id)
> REFERENCES UsrEmailTypes (usr_email_type_id);
>
>
> multiple 'Usrs' can have the same name, but different logins.
>
>
> I want to find the count of usrs that:
> have the name 'some_name'
> and
> have the email 'some_email'
>
> -----------------------------
> Should I use a JOIN or an IN?
> If the 'IN' example below is right, and there is either:
>
> NO Usr with name='some_name'
> OR
> NO email with email='some_email'
>
> will it return a NULL, or a '0' count?
>
> my thought for an IN:
> ----------------------
> SELECT COUNT(*)
> FROM UsrEmails
> WHERE
> usr_id IN
> (SELECT usr_id
> FROM Usrs
> WHERE name='some_name'::text)
> AND
> email_addr_id=(SELECT email_addr_id
> FROM Emails
> WHERE email='some_email'::text);
>
>
>
>
>
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faqs/FAQ.html

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Richard Welty 2004-09-27 03:22:03 Re: data modeler
Previous Message Tom Lane 2004-09-27 01:40:44 Re: Large arrays give long lag on server side before command executes