【问题标题】:Ambiguous column in MySQL even with Alias即使使用别名,MySQL 中的模棱两可的列
【发布时间】:2011-11-25 14:27:33
【问题描述】:

我有以下 MySQL:

select  `car`.`ID` AS `ID`,
    `title`,`text`
    from `car` 
    LEFT JOIN `truck` as bigcar ON bigcar.`ID` = `car`.`truckID` 
    WHERE `ID` ='1';

由于某种原因,我得到了

where 子句中的“ID”列不明确

出于复杂的代码原因,我不会将别名重命名为其他名称(例如 ID2)
这不应该工作吗?

【问题讨论】:

    标签: mysql ambiguous


    【解决方案1】:

    您需要在 where 子句中为 id 指定要使用的表。否则查询将不知道使用哪一个,因为您在两个表中具有相同的列名

    SELECT
     `car`.`ID` AS `ID`, `title`,`text`
    FROM `car` 
    LEFT JOIN `truck` as bigcar ON bigcar.`ID` = `car`.`truckID` 
    WHERE `car`.`ID` ='1';
    

    或者如果你想要bigcar ID,你必须使用:

    WHERE `bigcar`.`ID` ='1'; // not truck but bigcar which is the alias you created
    

    【讨论】:

      【解决方案2】:

      怎么样:

      select  `car`.`ID` AS `ID`, 
          `title`,`text` 
          from `car`  
          LEFT JOIN `truck` as bigcar ON bigcar.`ID` = `car`.`truckID`  
          WHERE `car`.`ID` ='1'; 
      

      【讨论】:

      • @Martin Smith - 我不是 MySql 负责人,但我不明白为什么?
      • 呃。哎呀,它根本不会将其转换为内部联接。评论已删除!如果 where 子句在右手边的桌子上就可以了。
      【解决方案3】:

      错误表示两个表中都存在字段ID。要修复它,您应该在 WHERE 子句中添加一个表别名,例如- bigcar.ID = 1 或 car.ID = 1 ...根据需要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多