использование подзапросов в основном запросе - PullRequest
0 голосов
/ 07 июля 2011

Я сделал как подзапрос, как это, но он выдавал ошибку

                    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'

Может ли кто-нибудь помочь ...

Ответы [ 5 ]

2 голосов
/ 07 июля 2011

Я думаю, что вам нужно удалить e из datediff, чтобы он стал sourcetable3.datdiff.

1 голос
/ 07 июля 2011
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
1 голос
/ 07 июля 2011

Вы использовали разные случаи для SourceTable3:

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

Если вы находитесь наLinux, попробуйте изменить их все на SourceTable3.См. Идентификатор регистра чувствительности .

0 голосов
/ 07 июля 2011

Хорошо, какая часть этого сообщения об ошибке доставляет вам неприятности? В sourcetable3 просто нет столбца с именем datediff, это datdiff

0 голосов
/ 07 июля 2011

Похоже, у вас есть опечатка в строке, где указан этот столбец:

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

Но вы должны заключить datediff в кавычки, поскольку это зарезервированное ключевое слово MySQL.

...