Re: IN or JOIN

Поиск
Список
Период
Сортировка
От Dennis Gearon
Тема Re: IN or JOIN
Дата
Msg-id 4157D052.2060804@fireserve.net
обсуждение исходный текст
Ответ на Re: IN or JOIN  (Thomas F.O'Connell <tfo@sitening.com>)
Список pgsql-general
No, I am just moving beyond table, foreign key, function, trigger, and contraint designing to more complicated queries.
Ijust didn't know enough to choose if either would WORK at all, much less be better. 


Thomas F. O'Connell wrote:
> 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@fireserve.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
>
>
>


В списке pgsql-general по дате отправления:

Предыдущее
От: "Gary Doades"
Дата:
Сообщение: Re: porting a full Ms Sql Server to postgres
Следующее
От: Martijn van Oosterhout
Дата:
Сообщение: Re: select query core dump