0

ハイキングとピークの mysql データベースに 2 つのテーブルがあります。

hikes: HikeID, Date, Name, Route, ...
peaks: PeakID, Name, Altitude, ...

どちらも「hp_links」というテーブルによって多対多の関係でリンクされています。私が取得したいのは、すべてのピークのリストであり、各ピークに対して、最も早く登った日付です。

私は次のことを思いつきました:

SELECT peaks.PeakID, peaks.Name, MIN(hikes.Date) AS FirstClimbed
FROM peaks
INNER JOIN hp_links ON peaks.PeakID = hp_links.PeakID
INNER JOIN hikes ON hp_links.HikeID = hikes.HikeID
GROUP BY peaks.PeakID

これは機能しますが、リンク テーブルにエントリがない (つまり、登っていない) ピークは含まれません。最初の INNER JOIN ('hp_links' へ) を LEFT JOIN に変更しましたが、違いはないようです。次に、2 番目の INNER JOIN (「ハイキング」) を RIGHT JOIN に変更しました。これは、peaks.PeakID = NULL、peaks.Name = NULL、FirstClimbed = ピークがリンクされていないハイキングの日付で構成される追加のレコードを取得したという点で違いがありました。

誰もこれに対する解決策を知っていますか?

4

1 に答える 1

0

両方の結合は左結合にする必要があると思います。そうしないと、2 番目の内部結合に hp_links のないピークが含まれません。

于 2013-01-07T01:10:08.093 に答える