【问题标题】:Ambigous column name error不明确的列名错误
【发布时间】:2018-10-23 06:33:36
【问题描述】:

我从 2 个表中选择命令时遇到问题。

所以我有 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;

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

【问题讨论】:

  • "老实说,我不明白这有什么问题?"试试谷歌或 Stackoverflow 搜索,我确定其他人之前有过这个错误。
  • 从表和连接表1?

标签: mysql sql sqlite select


【解决方案1】:

在from 之后删除table1,(混合旧类型“逗号”和现代连接语法)

像下面这样使用:

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 ) ;

【讨论】:

    【解决方案2】:

    永远不要在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 出现两次,因此任何对它的引用都是模棱两可的。

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

    【讨论】:

      【解决方案3】:

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

      from table1, table2 
      

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

      如下更改您的查询。

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多