Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在同一SQL查询中连接1个表两次_Mysql_Sql - Fatal编程技术网

Mysql 在同一SQL查询中连接1个表两次

Mysql 在同一SQL查询中连接1个表两次,mysql,sql,Mysql,Sql,我在同一个查询中加入了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 add

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

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

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

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

您必须为表的第二个和后续用法添加别名:

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

从地址您必须为表的第二个和后续用法别名:

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

从地址开始,您需要在查询中的每个
地址
表引用上使用单独的别名,以避免出现错误:

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中没有
完全连接
,所以我用
内部连接
替换了它们,这很可能是您的想法。

您需要在查询中的每个
地址
表引用上使用单独的别名,以避免出现错误:

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
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 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
,但是mysql中没有完全连接,这是一种变通方法

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

可能重复的可能重复的可能重复的你从来没有提到他使用的是MySQL中甚至不存在的
FULL-JOIN
,这其实并不重要。在几乎所有的数据库中使用重复的标识符都是一个错误。你从来没有提到过他使用的是MySQL中甚至不存在的
完全连接。在几乎所有数据库中使用重复标识符都是错误的