Ambigous列名错误

时间:2018-05-13 12:23:34

标签: mysql sql sqlite select

我遇到了来自2个表的select命令的问题。

所以我有table1:

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

和table2:

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

当我编写以下select语句时,我得到了不明确的列名table1.table1_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;

老实说,我不明白它有什么问题?

3 个答案:

答案 0 :(得分:3)

如果我理解正确,你在下面的行中有问题

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">

在上面的代码中,您使用from table1, table2 CROSS JOIN之间的table2,这在您的情况下不是必需的。

更改您的查询,如下所示。

table1

答案 1 :(得分:0)

<my_status>Dropped</my_status>之后删除table1,(混合旧类型“逗号”和现代连接语法)

使用如下:

from

答案 2 :(得分:0)

从不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的引用。你曾两次提到这张桌子。因此,当您引用该列时,引擎并不知道您所指的是什么。您的版本相当于:

from table1 cross join
     table2 join
     table1
     on table2.table1_id = table1.table1_id

table1出现两次,因此对它的任何引用都不明确。

您会注意到我还在查询中添加了表别名。表别名使查询更容易编写和读取。