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

なぜこれが失敗するのですか - 私はそれらが同じだと思っていましたか? 2 番目のクエリを修正するにはどうすればよいですか?

4

3 に答える 3

4

一般に、句を使用する場合、結合する列をリストUSING内で別名にする必要はありません。SELECTデータベースは、列があいまいではないことを認識しています。sales.dateと異なる可能性はありませんexchange_rates.dateON一方、句を使用すると、あいまいさが生じる可能性があります。明らかに、この場合、人間はあいまいさがないことを知っています。構文がそれを保証していないだけです。

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 に答える