首页 > 解决方案 > MySQL如果用CASE语句重新评估列然后别名相同的名称,如何引用别名?

问题描述

我正在使用 CASE 语句评估列,然后将其别名为与列相同的名称。然后我如何强制 MySQL 选择重新评估的值而不是原始值?

SELECT
store,
CASE 
        WHEN offer IN ("offer 1", "offer 2") THEN "books"
        ELSE offer
END AS offer,

DATE(datetime) as date,

concat(COALESCE(store, ""), COALESCE((select offer)," ")) as connector

FROM sales_1 ORDER BY datetime DESC

在上面的代码中,“concat”函数使用原始的“offer”值,而不是我在 CASE 语句中更改的值。我知道我可以在 COALESCE(...) 中做另一个 CASE,但必须有更简单的方法。

标签: mysql

解决方案


问题出在COALESCE((select offer). 您正在从无表中选择列报价。那在语法上是不正确的。

您已经提出了一种实现预期结果的方法。另一种方法是使用子查询,如下所示。

SELECT
    A.store,
    A.offer,
    A.`date`
    CONCAT(COALESCE(store, ""), COALESCE(A.offer," ")) AS connector
FROM
    (SELECT
       DISTINCT
       store,
       CASE WHEN offer IN ("offer 1", "offer 2") THEN "books"
            ELSE offer
       END AS offer,
       DATE(datetime) AS `date`
    FROM sales_1 
    ORDER BY `datetime` DESC) A;

推荐阅读