【问题标题】:Using a variable in select在选择中使用变量
【发布时间】:2024-01-13 18:01:01
【问题描述】:

我有这样的查询

SELECT ID, ... , 
       (SELECT MAX(EndDate) FROM Projects) As NewestDate,
       (CASE
           WHEN (NewestDate > NOW()) THEN 'More Work is coming'  
           ELSE 'Send Vendors to work' 
       END) Message
FROM SOME_TABLE

即我正在尝试在 CASE 中使用 NewestDate 的值。这可能吗?或者这样的事情可能吗?

谢谢

【问题讨论】:

    标签: mysql subquery case


    【解决方案1】:

    直接不可以。不过,您可以使用相同的语句两次:

    SELECT ID, ... , 
           (SELECT MAX(EndDate) FROM Projects) As NewestDate,
           (CASE
               WHEN ((SELECT MAX(EndDate) FROM Projects) > NOW()) 
               THEN 'More Work is coming'  
               ELSE 'Send Vendors to work' 
           END) Message
    FROM SOME_TABLE
    

    如果你想使用已经计算过的,使用子查询:

    select t.*,
        (
            case 
                when (NewestDate > NOW())
                    then 'More Work is coming'
                else 'Send Vendors to work'
                end
            ) Message
    from (
        select ID,
            ...,
            (
                select MAX(EndDate)
                from Projects
                ) as NewestDate
        from SOME_TABLE
        ) t;
    

    【讨论】:

      【解决方案2】:

      您可以在最新日期前加入。这将比每行的子查询更快。

      SELECT ID, ... , 
             nd.NewestDate,
             (CASE
                 WHEN (nd.NewestDate > NOW()) THEN 'More Work is coming'  
                 ELSE 'Send Vendors to work' 
             END) Message
      FROM SOME_TABLE
      JOIN (
          SELECT MAX(EndDate) AS NewestDate FROM Projects
      ) nd
      

      【讨论】: