开发者

SQL problem with subquery

I get the following error while running this query:

#1241 - Operand should contain 1 column(s)

SELECT *,
       Date_format(date_assigned, '%d-%m-%y')                     AS datum,
       YEAR(date_assigned)                                        AS YEAR,
       YEAR(NOW())                                                AS this_year,
       Datediff(NOW(), date_assigned)                             AS age,
       MONTH(NOW())                                               AS this_month,
       Concat(Period_add(Date_format(date_released, "%Y%m"), -6)) AS cancel_date
       ,
       Date_format(NOW(), '%Y%m')                                 AS
       this_date
FROM   reseller_numbers
WHERE  reseller_id = '31'
       AND MONTH(date_assigned) = '12'
       AND ( ( date_released IS NULL
                OR date_released > NOW() )
              OR ( Dayofyear(date_assigned) <= Dayofyear(date_released)
                   AND ( date_released IS NULL
                          OR date_released > NOW() ) ) )
       AND ( date_released IS NULL
              OR date_released > NOW()
                 AND date_released NOT LIKE '%2999%'
                 AND date_released != '2038-01-01 00:00:00' )
       AND ( date_released NOT IN (SELECT *,
                                          Date_format(DATE_ADD(date_released,
                                                      INTERVAL '-6' MONTH),
                                          '%d%m%y')
                                          AS
                                          cancel_date
      开发者_开发问答                             FROM   reseller_numbers
                                   WHERE  reseller_id = '31'
                                   HAVING DATE_ADD(date_released,
                                          INTERVAL '-6' MONTH)
                                          <
                                          NOW(
                                          )) )
ORDER  BY date_released DESC
LIMIT  0, 30 

Is there something wrong with this query? When I remove the subquery in date_released NOT IN, the query executes just fine.


The sub query must return only a single column for the date_released value to match on. Get rid of the "*,"


in date_released you should only select one column

SELECT Date_format(DATE_ADD(date_released,
                                                  INTERVAL '-6' MONTH),
                                      '%d%m%y')
                                      AS
                                      cancel_date
                               FROM   reseller_numbers
                               WHERE  reseller_id = '31'
                               HAVING DATE_ADD(date_released,
                                      INTERVAL '-6' MONTH)
                                      <
                                      NOW(
                                      ))


remove * from subquery

SELECT *,
       Date_format(date_assigned, '%d-%m-%y')                     AS datum,
       YEAR(date_assigned)                                        AS YEAR,
       YEAR(NOW())                                                AS this_year,
       Datediff(NOW(), date_assigned)                             AS age,
       MONTH(NOW())                                               AS this_month,
       Concat(Period_add(Date_format(date_released, "%Y%m"), -6)) AS cancel_date
       ,
       Date_format(NOW(), '%Y%m')                                 AS
       this_date
FROM   reseller_numbers
WHERE  reseller_id = '31'
       AND MONTH(date_assigned) = '12'
       AND ( ( date_released IS NULL
                OR date_released > NOW() )
              OR ( Dayofyear(date_assigned) <= Dayofyear(date_released)
                   AND ( date_released IS NULL
                          OR date_released > NOW() ) ) )
       AND ( date_released IS NULL
              OR date_released > NOW()
                 AND date_released NOT LIKE '%2999%'
                 AND date_released != '2038-01-01 00:00:00' )
       AND ( date_released NOT IN (SELECT Date_format(DATE_ADD(date_released,
                                                      INTERVAL '-6' MONTH),
                                          '%d%m%y')
                                          AS
                                          cancel_date
                                   FROM   reseller_numbers
                                   WHERE  reseller_id = '31'
                                   HAVING DATE_ADD(date_released,
                                          INTERVAL '-6' MONTH)
                                          <
                                          NOW(
                                          )) )
ORDER  BY date_released DESC
LIMIT  0, 30 


The subquery must have only one value selected, probably the DATE_FORMAT one. Remove the *.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜