簡體   English   中英

在同一SQL查詢中兩次聯接1個表

[英]Joining 1 table twice in the same SQL query

我在同一查詢上兩次加入1個表,但不斷收到錯誤消息,表明'FROM子句具有相同的公開名稱。 即使使用AS似乎也不起作用,有什么想法或建議嗎?

這是我正在使用的查詢;

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

您必須為表的第二種用法和后續用法加上別名:

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

別名的確切位置並不重要,但是如果您多次使用一個表,那么除一種用法外,所有其他用法都必須具有唯一的別名。

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

這可能是因為您在不同的表中具有相同的字段名稱

像這樣更改以確保字段名是唯一的

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

您需要在查詢中的每個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替換了它們,這很可能是您考慮的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM