MySQL:在定义变量时选择所有字段?

时间:2014-01-07 19:44:42

标签: mysql sql

非常简单的概念。我根据生成日期(X天前)选择特定行,并按时间范围组织它们(在这种情况下,变量是OVERDUEDAYS)。我现在唯一的问题是定义OVERDUEDAYS并选择整行内容而不必在select语句中定义每一列。

没有进一步的麻烦(这是我希望实现的目标):

SELECT DATEDIFF(CURDATE(), DATE(date_generated)) AS OVERDUEDAYS, * FROM invoices WHERE 
    (DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 10 DAY) 
OR 
    DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 30 DAY)
OR
DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 45 DAY)
OR
    DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 53 DAY)
OR
    DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 60 DAY))
AND 
    (paid=0 AND cancelled=0)

当你删除通配符并手动定义每一列时,查询效果很好......但这是很多列,我想不惜一切代价避免这种情况。建议?

1 个答案:

答案 0 :(得分:-2)

SELECT * FROM invoices WHERE colunm_id IN (
    SELECT colunm_id FROM invoices WHERE 
        (DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 10 DAY) 
           OR 
        DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 30 DAY)
           OR
        DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 45 DAY)
           OR
        DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 53 DAY)
           OR
        DATE(date_generated) = DATE_SUB(CURDATE(), INTERVAL 60 DAY))
           AND 
        (paid=0 AND cancelled=0)
)