错误代码:1054。'on clause' 中的未知列 'r.when_added'

Error Code: 1054. Unknown column 'r.when_added' in 'on clause'

这里好像有什么问题?

错误代码:1054。'on clause'

中的未知列 'r.when_added'
 SELECT r.coupon_id, c.who_added, c.coupon_name, r.when_added,
           (select count(*) 
            FROM redeemed_coupons r2 JOIN
                 coupon c2
                 ON r2.coupon_id = c2.coupon_id AND
                    c2.who_added = 1 AND
                    r2.when_added BETWEEN 1602827745 AND 1613084678 AND
                    r2.when_added = r.when_added
          )
    FROM redeemed_coupons r JOIN
         coupon c
         ON r.coupon_id = c.coupon_id AND
            c.who_added = 1 AND
            r.when_added BETWEEN 1602827745 AND 1613084678
    ORDER BY r.when_added ;

感谢您的帮助!

查看您的查询,我怀疑您在子查询中是否真的需要 join。这不是你想要的吗?

SELECT r.coupon_id, c.who_added, c.coupon_name, r.when_added,
    (
        SELECT COUNT(*) 
        FROM redeemed_coupons r2 
        WHERE r2.coupon_id = c.coupon_id AND r2.when_added = r.when_added
    ) cnt
FROM redeemed_coupons r 
INNER JOIN coupon c ON c.coupon_id = r.coupon_id  
WHERE r.when_added BETWEEN 1602827745 AND 1613084678 AND c.who_added = 1
ORDER BY r.when_added ;

除了suqbuery的变化外,我还re-organized对外部查询的条件进行了一些修改;这不会改变结果,但我发现只将相关条件放在 ON 子句中,将其他条件放在 WHERE 子句中更具可读性。

你也可以用 window count() 来表达,如果你是 运行 MySQL 8.0:

SELECT r.coupon_id, c.who_added, c.coupon_name, r.when_added,
    COUNT(*) OVER(PARTITION BY r.coupon_id, r.when_added) cnt
FROM redeemed_coupons r 
INNER JOIN coupon c
    ON  r.coupon_id = c.coupon_id 
    AND c.who_added = 1 
    AND r.when_added BETWEEN 1602827745 AND 1613084678
ORDER BY r.when_added ;