【问题标题】:MYSQL: Error 1054 - Unknown ColumnMYSQL:错误 1054 - 未知列
【发布时间】:2012-03-09 21:00:40
【问题描述】:

在我们开始之前,我为我的 MYSQL 新手身份道歉。我正在尝试自学并在基本结构方面有点挣扎。

我的问题的背景:假设一家公司每季度发行一次账单......并且在上个季度结束后大约两个月。我有一个包含几列的表 (Quarter_Identify):

  • Quarter_Start EX:01-01-2010
  • Quarter_End EX: 03-31-2010
  • Quarter_Ident EX: 1000
  • Date_Billed 这是我试图从另一个表中填充的字段

另一个表 (Billing_List_1) 包含:

  • Date_Billed EX:05-23-2010
  • 很多其他与客户相关的废话

我们在本季度接受所有订单,并在结束后约 60 天开具账单。因此,在上面的示例中,2010 年 5 月 23 日的计费将与 1 月至 3 月季度相关(我们计费非常晚)。我想取这个日期并将其填充为与 Quart_Ident "1000" 关联的 Date_Billed。

我非常接近,根据我的研究,我认为我遇到了这样一个问题,即我的“Where”子句包含对尚未创建的表“Skyline”的引用。 “天际线”表将所有内容放在一起,但实际上相差了一个月(我放弃了尝试找出 DateDiff 函数)。因此,我使用底部将结果偏移一并得到正确答案...除了它告诉我我的 where 子句中有一个未知列(错误 1054)问题。

Select * from
    (select Billing_List_1.date_billed, quarter_identify.quarter_start,
      quarter_identify.quarter_end, quarter_identify.quarter_ident from Billing_List_1
    join quarter_identify
    on Billing_List_1.date_billed > quarter_identify.quarter_start 
      and Billing_list_1.date_billed < quarter_identify.quarter_end)
as SKYLINETABLE;

update quarter_identify A
    set A.date_Billed = SKYLINETABLE.date_Billed 
    where A.quarter_ident = SKYLINETABLE.quarter_ident - 1

任何想法将不胜感激。祝大家有个愉快的夜晚。


每个 TEEZ 的解决方案:再次感谢您的大力帮助。

update quarter_identify A Left join 
    (Select * from
        (select     Billing_List_1.date_billed, 
                    quarter_identify.quarter_start, 
                    quarter_identify.quarter_end, 
                    quarter_identify.quarter_ident from billing_list_1
        join quarter_identify
        on Billing_list_1.date_billed > quarter_identify.quarter_start 
        and Billing_list_1.date_billed < quarter_identify.quarter_end) 
    as T)
    as SKYLINETABLE on 1
    set A.date_billed = SKYLINETABLE.date_billed 
    where A.quarter_ident = SKYLINETABLE.quarter_ident - 1

【问题讨论】:

  • 你似乎解释了一些额外的东西。我们感到困惑。
  • 切入正题...“错误代码:1054。'where 子句'中的未知列'Skyline.quarter_ident'”
  • 任何季度(如果我理解结构正确的话)都与许多账单相关。那么,您为什么要在此处设置Date_Billed 专栏?
  • 每季度只有一次批量计费。
  • @Skyline29:您不必在标题上添加[SOLVED] 或任何内容。一旦你接受了一个答案,这对其他人来说是显而易见的。

标签: mysql mysql-error-1054


【解决方案1】:

我认为你错了。更新查询中的SKYLINE 表是什么?

您正在更新查询中加入表,但未指定表。您应该将第一个查询与更新查询结合使用。

您需要在更新查询中使用 join SKYLINETABLE。

如下:

update quarter_identify A left join (Select * from
    (select Billing_List_1.date_billed, quarter_identify.quarter_start,
      quarter_identify.quarter_end, quarter_identify.quarter_ident from Billing_List_1
    join quarter_identify
    on Billing_List_1.date_billed > quarter_identify.quarter_start 
      and Billing_list_1.date_billed < quarter_identify.quarter_end)) as SKYLINETABLE on[... specify on condition....]
    set A.date_Billed = SKYLINETABLE.date_Billed 
    where A.quarter_ident = SKYLINETABLE.quarter_ident - 1

请进行必要的更改

【讨论】:

  • 很好,Teez,我在上面粘贴时弄乱了它。更正了语言,但我仍然有同样的问题。
  • Teez,我不确定我是否理解“on[...指定条件....]”...这个表被左连接到什么?第 4 行的连接将所有数据收集在一起
  • Teez,你明白了。缺少一个“AS [Whatever]”声明,但你成功了!太感谢了。我将在上面发布已解决的代码。再次感谢。
猜你喜欢
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 2021-05-27
  • 2017-03-17
  • 2013-10-13
  • 1970-01-01
相关资源
最近更新 更多