0

以下查询有效:

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

为什么会失败——我以为它们是一样的?我将如何解决第二个查询?

4

3 回答 3

4

通常,如果您使用该USING子句,则您要加入的列不需要在SELECT列表中使用别名。数据库知道该列没有歧义——没有可能sales.dateexchange_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应该可以工作(为了明确起见,我也添加了)

于 2012-06-03T19:18:10.167 回答
2

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

SELECT SUM(s.sales), e.date FROM sales s INNER JOIN exchange_rates e ON s.date = e.date
于 2012-06-03T19:06:31.853 回答
0

如果您的日期列也包含时间,则它们极不可能匹配以便加入。你有没有尝试过这样的事情?

INNER JOIN 
exchange_rates
ON DATE_FORMAT(sales.date,'%c,%e %m) = DATE_FORMAT(exchange_rates.date,'%c,%e %m)
于 2012-06-03T19:13:37.797 回答