Thread: Hint for a query
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
On Nov 4, 2011, at 0:37, Efrain Lopez <tecnomaya@cabsagt.com> wrote: > 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 > > SELECT + JOIN The query you seek seems too simple that either you have not learned how to do simple SELECTS with multiple tables OR youare not clear regarding what is confusing you. The documentation and other books/articles on basic SQL will help in the first case. Showing what work you have tried upto this point will help with the second. Your tables also will be cumbersome to use as designed, but your immediate question is easily answered with the existingschema. In short the link to contact from salesperson is questionable since employee already links there. Thereis not enough context to provide alternatives but it is worth looking into. David J.
> 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...