Billy
Billy

Reputation: 3

Joining 1 table twice in the same SQL query

I have joined 1 table twice on the same query, I keep getting error messages that the 'FROM clause have same exposed names. Even using AS does not seem to work, any ideas or suggestions?

here is the query I am using;

select Contact.*, PERSON.*, address.*

from address
full join Contact
on address.uprn = Contact.uprn
full join PERSON
on Contact.contactno = PERSON.contact
full join address
on address.uprn = PERSON.driveruprn

Upvotes: 0

Views: 1011

Answers (4)

Dexion
Dexion

Reputation: 1101

select Contact.*, PERSON.*, a1.*, a2.*
from address a1
full join Contact
on a1.uprn = Contact.uprn
full join PERSON
on Contact.contactno = PERSON.contact
full join address a2
on a2.uprn = PERSON.driveruprn

, however there is no full join in mysql, workaround

select * from t1
left join t2 ON t1.id = t2.id
union
select * from t1
right join t2 ON t1.id = t2.id

Upvotes: 2

Tim Biegeleisen
Tim Biegeleisen

Reputation: 520898

You need to use a separate alias on each of the address table references in your query to avoid the error you are seeing:

SELECT Contact.*, PERSON.*, a1.*, a2.*
FROM address a1 INNER JOIN Contact ON a1.uprn = Contact.uprn
INNER JOIN PERSON ON Contact.contactno = PERSON.contact
INNER JOIN address a2 ON a2.uprn = PERSON.driveruprn

By the way, there is no FULL JOIN in MySQL, so I have replaced them with INNER JOIN which is likely what you had in mind.

Upvotes: 0

Marc B
Marc B

Reputation: 360572

You have to alias the second and subsequent usages of a table:

select ...
from address                        <---first usage
join contact ...
join person ...
join address AS other_address ...   <---second usage
             ^^^^^^^^^^^^^^^^ 

Doesn't really matter exactly where you do the aliases, but if you use a single table multiple times, all but ONE of those usages have to have unique aliases.

Upvotes: 2

Juan Carlos Oropeza
Juan Carlos Oropeza

Reputation: 48177

This is probably because you have same field name in different table

change it like this to make sure fieldnames are unique

 SELECT 
       Contact.field1 as c_field1, Contact.field2 as c_field2 ...,
       PERSON.field1  as p_field1, PERSON.field2  as p_field2 ...,
       address.field1 as a_field1, address.field2 as a_field2 ...

Upvotes: 0

Related Questions