繁体   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