2015-10-14 7 views
0

Я присоединился к 1 таблице дважды в одном запросе, я продолжаю получать сообщения об ошибках, что предложение FROM имеет одинаковые открытые имена. Даже использование AS, похоже, не работает, никаких идей или предложений?Присоединение к одной таблице дважды в одном SQL-запросе

вот запрос, который я использую;

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 
+0

Возможный дубликат [Как я могу исправить имена корреляции по этому SQL присоединиться?] (Http://stackoverflow.com/ Вопросы/8956577/how-can-i-correct-the-corre-names-on-this-sql-join) –

ответ

2
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 

, однако нет полной присоединитесь в MySQL, обходной путь

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

@Tim Biegeleisen поблагодарить ваш ответ действительно помог. – Billy

+0

Также спасибо всем за ваш ответ – Billy

0

Это, вероятно, потому, что у вас есть такие же имя поля в другой таблице

изменить его, как это, чтобы убедиться имена полей являются уникальными

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 ... 
2

Вы псевдоним вторых и последующих обычаев таблица:

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

Не имеет значения, где именно вы делаете псевдонимы, но если вы используете одну таблицу несколько раз, все, кроме ОДНОГО из этих обычаев, должны иметь уникальные псевдонимы.

+0

Вы никогда не обращались к факту, что он использует 'FULL JOIN', который даже не существует в MySQL. –

+0

на самом деле не имеет значения. использование повторяющихся идентификаторов было бы ошибкой почти в каждой базе данных –

0

Вы должны использовать отдельный псевдоним на каждом из ссылок на таблицы в address в запросе, чтобы избежать ошибок, которые вы видите:

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 

Кстати, нет в MySQL нет FULL JOIN, поэтому у меня есть заменили их INNER JOIN, что, скорее всего, вы имели в виду.

Смежные вопросы