2015-10-14 341 views
0

我在同一個查詢中連接兩個表兩次,我不斷收到錯誤消息,指出'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 /如何糾正相關名稱在這個SQL聯接) –

回答

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替換它們,這可能是你想到的。