模棱两可的列名错误

nkkqxpd9  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(212)

我对两个表中的select命令有问题。
所以我有了表1:

table1_id = int pk;    
table1_name;   
table1_surname;   
table1_age;    
table1_address;   
table1_city;

表2:

table2_id int pk   
table1_id int fk references table1.table1_id;   
table3_id;  
table2_description;

当我编写下面的select语句时,我得到了含糊不清的列名table1.table1\u name错误:

SELECT table2.table2_id, table2.table1_id, table1.table1_name, table2.table2_description
from table1,
     table2 inner join
     table1
     on table2.table1_id = table1.table1_id;

老实说,我不明白这是怎么回事?

ncgqoxb0

ncgqoxb01#

删除 table1, 就在之后 from (混合了老式“逗号”和现代连接语法)
使用方法如下:

SELECT t2.table2_id, t2.table1_id, t1.table1_name, t2.table2_description 
  FROM table2 t2 INNER JOIN table1 t1 ON ( t2.table1_id = t1.table1_id ) ;
fivyi3re

fivyi3re2#

不要在句子中使用逗号 FROM 条款。始终使用适当的、明确的 JOIN 语法:

select t2.table2_id, t2.table1_id, t1.table1_name, t2.table2_description
from table1 t1 join
     table2 t2 
     on t2.table1_id = t1.table1_id;

查询的问题是有两个引用 table1 因为逗号。你已经两次提到这张table了。因此,当您引用列时,引擎不知道您所指的是什么。您的版本相当于:

from table1 cross join
     table2 join
     table1
     on table2.table1_id = table1.table1_id
``` `table1` 出现两次,因此对它的任何引用都是不明确的。
您会注意到,我还向查询中添加了表别名。表别名使查询更易于编写和读取。
w8biq8rn

w8biq8rn3#

如果我理解正确的话,你在下线有问题

from table1, table2

在上面的代码中,您使用的是 CROSS JOIN 介于 table2 以及 table1 这在你的情况下是不需要的。
更改您的查询,如下所示。

SELECT table2.table2_id, table2.table1_id, table1.table1_name, table2.table2_description 
from  table2 
 inner join table1 on table2.table1_id = table1.table1_id;

相关问题