【问题标题】:Joining 1 table twice in the same SQL query在同一个 SQL 查询中两次加入 1 个表
【发布时间】:2015-10-14 15:12:43
【问题描述】:

我在同一个查询中加入了 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

【问题讨论】:

标签: mysql sql


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    您必须为表的第二次和后续使用起别名:

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

    在哪里使用别名并不重要,但如果您多次使用同一个表,那么除了其中一个以外的所有用法都必须有唯一的别名。

    【讨论】:

    • 你从来没有提到他正在使用FULL JOIN,这在 MySQL 中甚至不存在。
    • 并不重要。在几乎每个数据库中使用重复的标识符都是一个错误
    【解决方案3】:

    这可能是因为您在不同的表中具有相同的字段名称

    像这样更改它以确保字段名是唯一的

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

    【讨论】:

      【解决方案4】:

      您需要在查询中的每个 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,这可能是您的想法。

      【讨论】:

        猜你喜欢
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 2013-12-20
        相关资源
        最近更新 更多