使用工作但是失败了,为什么?

时间:2012-06-03 19:02:16

标签: mysql sql

以下查询有效:

SELECT 
    SUM(sales), 
    date
FROM 
    sales
    INNER JOIN
    exchange_rates
    USING(date) 

但这失败了:

SELECT 
    SUM(sales), 
    date
FROM 
    sales
    INNER JOIN
    exchange_rates
    ON sales.date = exchange_rates.date

为什么会失败 - 我认为它们是一样的?我该如何修复第二个查询?

3 个答案:

答案 0 :(得分:4)

通常,如果您使用USING子句,则您要加入的列不需要在SELECT列表中添加别名。数据库知道该列不含糊不清 - sales.date不可能与exchange_rates.date不同。另一方面,如果使用ON子句,则可能存在歧义。显然,在这种情况下,你是人类知道没有歧义,只是语法并不能保证这一点。

SELECT 
    SUM(sales), 
    sales.date
FROM 
    sales
    INNER JOIN
    exchange_rates
    ON sales.date = exchange_rates.date
GROUP BY sales.date

应该有效(我正在添加GROUP BY以便明确)

答案 1 :(得分:2)

在实际的select语句中尝试别名调用的日期?

SELECT SUM(s.sales), e.date FROM sales s INNER JOIN exchange_rates e ON s.date = e.date

答案 2 :(得分:0)

如果您的日期列也包含时间,那么它们不太可能匹配以便加入。 你尝试过这样的事吗?

INNER JOIN 
exchange_rates
ON DATE_FORMAT(sales.date,'%c,%e %m) = DATE_FORMAT(exchange_rates.date,'%c,%e %m)