Re: Hint for a query

From: Uwe Schroeder <uwe(at)oss4u(dot)com>
To: pgsql-general(at)postgresql(dot)org
Cc: Efrain Lopez <tecnomaya(at)cabsagt(dot)com>
Subject: Re: Hint for a query
Date: 2011-11-04 06:52:39
Message-ID: 201111032352.40630.uwe@oss4u.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> I have this tables
>
>
> Table: Contact
> IdContact
> First Name
> Second Name
> … other columns
>
> Table: Employee
> IdEmployee
> IdContact, related to Contact table
> … other columns
>
> Table: Salesman
> IdSaleman
> IdEmployee, if salesman is employee, related to Employee table
> IdContact, if salesman is not an employee, related to Contact table
>
>
> I need a query
>
> Id Salesman - Second name - First name
>
> But I can't figure how to do it, can someone can give advise?
>
> Thanks

Needless to say, this is bit of an odd table layout. You always end up at the
contact table, but the layout makes it harder to query. Personally I'd have a
foreign key from the contact table to the employee table, rather than the
employee table to the contact table - that would also eliminate the employee
foreign key in the salesman table. It would also allow you to just join the
salesman table to the contact table and then figure out if the contact is an
employee.

well, that said. Here's a quick one without a lot of deep thought...

select a.idsalesman, b.firstname, b.secondname from salesman a join contact b
on b.idcontact=a.idcontact union select c.idsalesman, d.firstname,
d.secondname from salesman c join employee e on e.idemployee=c.idemployee join
contact d on d.idcontact=e.idcontact

No guarantees though. It's midnight here and I had a long day...

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Michael Musenbrock 2011-11-04 06:56:22 Custom Contraint Violation Errors
Previous Message David Johnston 2011-11-04 05:07:27 Re: Hint for a query