【问题标题】:using subqueries in main query在主查询中使用子查询
【发布时间】:2011-07-07 10:39:57
【问题描述】:

我已经完成了像这样的子查询,但它给出了错误

                    SELECT 
              sourceTable3.Total,
              (sourcetable3.datediff-1) as diff,
            ADDDATE(ADDDATE(NOW(), INTERVAL FLOOR(diff) MONTH), INTERVAL DAY(NOW()) -            memberToMship_DueDay DAY) As expdate,
              ExpPayments, 
            MonthlyAmount, 
            SourceTable3.ExpPayments2, 
             FROM
             (
             SELECT 
                SourceTable2.Total,
             (SourceTable2.datdiff-1) as diff,
             SourceTable2.datdiff,                 
            ExpPayments, 
            MonthlyAmount, 
            SourceTable2.ExpPayments2, 
           member_Id 
          FROM 
          (
             SELECT 
              SourceTable.Total,
               ceil(SourceTable.ExpPayments-SourceTable.Total) AS datdiff,                 
              SourceTable.ExpPayments, 
                SourceTable.MonthlyAmount, 
            (SourceTable.Total/SourceTable.MonthlyAmount) as ExpPayments2, 
               SourceTable.member_Id 
          FROM 
           ( 
              SELECT                          TIMESTAMPDIFF(MONTH,memberToMship_StartDate,memberToMship_EndDate)*      memberToMship_ChargePerPeriod As Total,     
DATEDIFF(GREATEST(NOW(),memberToMship_DueDay),memberToMship_StartDate)/30 AS ExpPayments,
30* memberToMship_ChargePerPeriod / DATEDIFF(memberToMship_EndDate,memberToMship_StartDate) AS MonthlyAmount, 
member_Id
            FROM 
            membertomships 
         ) as SourceTable
      ) as SourceTable2
  ) as sourceTable3

但它给出了这样的错误......

                         Error Code: 1054
                         Unknown column 'sourcetable3.datediff' in 'field list'

有没有人帮忙...

修改代码:

修改了'e'得到了这样的错误

错误代码:1054 “字段列表”中的未知列“memberTo_Mship_DueDay”

修改代码:

这是我的表结构

                                membership table
                              memberToMship_Id
                             memberToMship_StartDate
                             memberToMship_EndDate
                             memberToMship_DueDay
                             member_Id

                       I want finally these columns expdate , diff , ExpPayments, 
            MonthlyAmount, 





            MODIFIED CODE :




                SELECT 
           SourceTable3.Total,

          ADDDATE(ADDDATE(NOW(), INTERVAL FLOOR(diff) MONTH), INTERVAL DAY(NOW()) -          memberToMship_DueDay DAY) As expdate,
          (Sourcetable3.datdiff-1) as diff,
         ExpPayments, 
            MonthlyAmount, 
          SourceTable3.ExpPayments2, 
           SourceTable3.member_Id
          FROM
          (
              SELECT 
            SourceTable2.Total,
             (SourceTable2.datdiff-1) as diff,
            SourceTable2.datdiff,                 
            ExpPayments, 
            MonthlyAmount, 
           SourceTable2.ExpPayments2, 
            member_Id 
                FROM 
                (
                        SELECT 
               SourceTable.Total,
                 ceil(SourceTable.ExpPayments-SourceTable.Total) AS datdiff,                 
                SourceTable.ExpPayments, 
               SourceTable.MonthlyAmount, 
              (SourceTable.Total/SourceTable.MonthlyAmount) as ExpPayments2, 
               SourceTable.member_Id 

               FROM 
               ( 
              SELECT TIMESTAMPDIFF(MONTH,memberToMship_StartDate,memberToMship_EndDate)*      memberToMship_ChargePerPeriod As Total,     
                   DATEDIFF(GREATEST(NOW(),memberToMship_DueDay),memberToMship_StartDate)/30 AS ExpPayments,
           30* memberToMship_ChargePerPeriod /                      DATEDIFF(memberToMship_EndDate,memberToMship_StartDate) AS MonthlyAmount, 
member_Id
           FROM 
           membertomships 
          ) as SourceTable
        ) as SourceTable2
      ) as SourceTable3

和错误

                        Error Code: 1054
                       Unknown column 'memberToMship_DueDay' in 'field list'

有没有人帮忙...

【问题讨论】:

  • 哦,来吧,检查你的桌子
  • @wonk0 我在 memberTomship 表中有列 memberTo_Mship_DueDay 像这些字段 ...memberToMship_EndDate,memberToMship_StartDate
  • @user682417 你还是有问题,请给你的表格截图和你想要的结果。
  • @rahularyansharma 请查看我现在修改的问题...
  • @user682417:为什么你现在有 3 个子选择?你只需要1..!!你有没有看我对你其他问题的回答??

标签: mysql sql datetime mysql-error-1054


【解决方案1】:

我认为您需要从datediff 中删除e,使其变为sourcetable3.datdiff

【讨论】:

  • 是的,我已经删除了它,但它给出了这样的错误......错误代码:1054.'字段列表'中的未知列'memberToMship_DueDay'
  • @user682417:我会根据您所指的实际表格检查您的列拼写。
  • 问题在这里 sourceTable3.Total, (sourcetable3.datdiff-1) as diff, ADDDATE(ADDDATE(NOW(), INTERVAL FLOOR(diff) MONTH), INTERVAL DAY(NOW()) - memberToMship_DueDay DAY) 作为 expdate,memberToMship_DueDay 不在字段列表中
  • @user682417:memberToMship_DueDay 是否存在于任何表中?
  • @user682417:您在外部 SELECT 列表中使用了 memberToMship_DueDay,但我没有看到任何内部 SELECT 列表。
【解决方案2】:
SELECT 
      SourceTable2.Total,
      ADDDATE(ADDDATE(NOW(), INTERVAL FLOOR(diff) MONTH), INTERVAL DAY(NOW()) -memberToMship_DueDay DAY) As expdate,
      datdiff, 
      diff,
      SourceTable2.ExpPayments, 
      SourceTable2.MonthlyAmount, 
      (SourceTable2.Total/SourceTable2.MonthlyAmount) as ExpPayments2, 
      SourceTable2.expdate,
      SourceTable2.member_Id 
FROM
(    
    SELECT 
      memberToMship_DueDay,
      SourceTable.Total,
      SourceTable.expdate
      ceil(SourceTable.ExpPayments-SourceTable.Total) AS datdiff, 
      ceil(SourceTable.ExpPayments-SourceTable.Total) -1 As diff,
      SourceTable.ExpPayments, 
      SourceTable.MonthlyAmount, 
      (SourceTable.Total/SourceTable.MonthlyAmount) as ExpPayments2, 
      SourceTable.expdate,
      SourceTable.member_Id 
    FROM 
    ( 
        SELECT 
          memberToMship_DueDay,
          TIMESTAMPDIFF(MONTH,memberToMship_StartDate,memberToMship_EndDate)*memberToMship_ChargePerPeriod As Total, 
          DATEDIFF(GREATEST(NOW(),memberToMship_DueDay),memberToMship_StartDate)/30 AS ExpPayments,
          30* memberToMship_ChargePerPeriod /DATEDIFF(memberToMship_EndDate,memberToMship_StartDate) AS MonthlyAmount, 
          member_Id
      FROM membertomships 
    ) as SourceTable
) as SourceTable2

【讨论】:

  • 错误代码:1054 Unknown column 'diff' in 'field list' 这是我得到的错误...
【解决方案3】:

你为SourceTable3使用了不同的案例:

sourceTable3.Total,
(sourcetable3.datediff-1) as diff,
SourceTable3.ExpPayments2,
) as sourceTable3

如果您使用的是 Linux,请尝试将它们全部更改为 SourceTable3。见Identifier Case Sensitivity

【讨论】:

    【解决方案4】:

    您在标识该列的行中似乎有错字:

    ceil(SourceTable.ExpPayments-SourceTable.Total) AS datdiff, 
                                              -----------^^-----
    

    但您应该将datediff 括在反引号中,因为它是 MySQL 的保留关键字。

    ceil(SourceTable.ExpPayments-SourceTable.Total) AS `datediff`,
    

    【讨论】:

    • 那也很好..但现在我得到了像这样的不同错误...错误代码:1054 Unknown column 'memberToMship_DueDay' in 'field list'
    【解决方案5】:

    那么,这条错误消息的哪一部分给您带来了麻烦? sourcetable3 中根本没有名为 datediff 的列,是 datdiff

    【讨论】:

    • 错误代码:1054 Unknown column 'memberTo_Mship_DueDay' in 'field list 这是错误
    • @user682417 根据实际表格检查拼写。还要检查您是否使用相同的案例。如果您使用的是 linux,则列名和表名区分大小写。
    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多