【问题标题】:Error Code: 1054. Unknown column 'r.when_added' in 'on clause'错误代码:1054。“on 子句”中的未知列“r.when_added”
【发布时间】:2021-02-18 09:39:00
【问题描述】:

这里似乎有什么问题?

错误代码:1054。“on 子句”中的未知列“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 ;

感谢您的帮助!

【问题讨论】:

  • 尝试将该条件放在WHERE 子句中。 . . WHERE r2.when_added = r.when_added.

标签: mysql sql count subquery inner-join


【解决方案1】:

查看您的查询,我怀疑您在子查询中是否真的需要 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的变化之外,我还对外部查询中的条件进行了一些重新整理;这不会改变结果,但我发现只将关联条件放在ON 子句中,将其他条件放在WHERE 子句中更具可读性。

如果您运行的是 MySQL 8.0,您也可以使用窗口 count() 来表达这一点:

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 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多