【问题标题】:Join error: #1052 - Column 'TaskID' in field list is ambiguous加入错误:#1052 - 字段列表中的列“TaskID”不明确
【发布时间】:2015-01-30 05:36:36
【问题描述】:

尝试加入这 3 个表,但得到 #1052 - 字段列表中的列“TaskID”不明确。请帮忙

select P.ProjectColor,TimeCardID,UserName,TaskName,TaskID,MAX (Punch), TotalHours,Running,LASTUPDATE 
from T_TIMECARD as E, T_TASK as A, T_PROJECT AS P 
where   E.TaskID = A.TaskID
AND P.ProjectID = A.ProjectID
group by Punch 
order by Punch desc;

【问题讨论】:

    标签: sql join


    【解决方案1】:

    学习使用明确的join 语法。问题是由于两个表中的列相同。是的,他们= 表明它们具有相同的值,但您必须明确:

    Select P.ProjectColor, TimeCardID, UserName, TaskName, A.TaskID,
          MAX(Punch), TotalHours, Running, LASTUPDATE 
    from T_TIMECARD E JOIN
         T_TASK A
         ON E.TaskID = A.TaskID JOIN
         T_PROJECT P
         ON P.ProjectID = A.ProjectID
    group by  P.ProjectColor, TimeCardID, UserName, TaskName, A.TaskID, TotalHours, Running, LASTUPDATE 
    order by MAX(Punch) desc;
    

    您的group by 还应提及所有不在聚合列中的列。

    【讨论】:

    • IT WORKS,选择 P.ProjectColor,TimeCardID,用户名,TaskName,A.TaskID,MAX(Punch) 作为 LASTUDATE,TotalHours,从 T_TIMECARD 运行 E 加入 T_TASK A ON E.TaskID = A.TaskID JOIN T_PROJECT P ON P.ProjectID = A.ProjectID GROUP BY P.ProjectColor, TimeCardID, UserName, TaskName, A.TaskID, TotalHours, Running ORDER BY MAX( Punch ) DESC
    【解决方案2】:

    select 子句引用了TaskID,但它不知道你的意思是E.TaskID 还是A.TaskID。您需要为您的 select 子句中出现在多个表中的所有列指定别名。

    group by 也会出现问题:如果按punch 分组,则 select 子句中除punch 之外的所有其他列都必须是聚合函数。

    【讨论】:

      【解决方案3】:

      使用别名....

      select P.ProjectColor,TimeCardID,UserName,TaskName,  **A.TaskID**  ,MAX (Punch),   
      
      TotalHours,Running,LASTUPDATE 
      
      from T_TIMECARD as E, T_TASK as A, T_PROJECT AS P 
      where   E.TaskID = A.TaskID
      AND P.ProjectID = A.ProjectID
      
      group by Punch 
      order by Punch desc;
      

      【讨论】:

      • 我做了一些更改,现在它告诉我没有选择数据库
      • 选择 P.ProjectColor,TimeCardID,UserName,TaskName,A.TaskID,MAX(Punch) as LastUpdate, TotalHours,Running from T_TIMECARD as E, T_TASK as A, T_PROJECT AS P where E.TaskID = A.TaskID AND P.ProjectID = A.ProjectID group by Punch order by Punch desc;
      【解决方案4】:
      DROP VIEW IF EXISTS RECENT_TIMECARD;
      
      CREATE VIEW RECENT_TIMECARD AS
      
      SELECT P.ProjectColor, TimeCardID, UserName, TaskName, A.TaskID, MAX( Punch ) AS LASTUDATE, TotalHours, Running
      FROM T_TIMECARD E
      JOIN T_TASK A ON E.TaskID = A.TaskID
      JOIN T_PROJECT P ON P.ProjectID = A.ProjectID
      GROUP BY P.ProjectColor, TimeCardID, UserName, TaskName, A.TaskID, TotalHours, Running
      ORDER BY MAX( Punch ) DESC
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        相关资源
        最近更新 更多