【问题标题】:Ambiguous Column Name in SQlite3 when attempting do to a select statement with a join clause尝试使用连接子句对 select 语句执行操作时,SQlite3 中的列名不明确
【发布时间】:2020-04-07 13:52:34
【问题描述】:

似乎 sqlite3 需要额外的信息来指定在连接两个表时要从哪里提取某些列。不知何故,当我尝试使用 join 子句执行 select 语句时,查询返回:

Error: ambiguous column name: name

即使我在语句中指定了要从中检索“名称”列的位置,在本例中是从表 t1:

select name from t1 join t2 on t1.name = t2.name where beer = 'Alesmith Decadence' and nickname = 'SUP';

那么 sqlite3 不理解这种格式还是什么?还是 sqlite3 需要更多信息才能理解此查询。

【问题讨论】:

  • 选择 t.name 或 t2.name... 始终限定所有列(当涉及多个表时)是一种很好的 SQL 编码实践。
  • 对,但我的意思是在这种情况下,我在 from 子句 no 上指定了我想从哪里检索列?
  • 您的 FROM 有两个表,每个表都有一列 name。你必须指定你想要哪一个。

标签: sql sqlite


【解决方案1】:

当您编写查询时,您应该学会使用方便的表别名来限定所有 列名称。目前还不清楚正确的别名是什么,但类似这样:

select t1.name
from t1 join
     t2
     on t1.name = t2.name
where t2.beer = 'Alesmith Decadence' and t2.nickname = 'SUP';

那么您、其他所有人以及 SQL 解析器都清楚您指的是哪些列。

注意:您没有显示示例数据或显示表定义,因此上述可能无法正常工作,因为表别名可能不正确。

【讨论】:

    【解决方案2】:

    试试这个

    select t1.name
    from t1 join t2 on t1.name = t2.name
    where beer = 'Alesmith Decadence' and nickname = 'SUP';
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      相关资源
      最近更新 更多