以下查询有效:
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
为什么会失败 - 我认为它们是一样的?我该如何修复第二个查询?
答案 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)