私はこの問題を骨の折れる部分から取り除こうとしました。元のクエリで達成しようとしていることの本質をまだ把握していることを願っています。
- テーブルとデータを生成するためのコードはここにあります。
- SQLフレーバーはMicrosoftSQLServer 2000です(ただし、MySQLでこの簡略化されたテストケースを実行しています)
元のテーブル
+-----------+----------+----------+
| master_id | slave_id | distance |
+-----------+----------+----------+
| 1 | 1 | 0.1 |
| 1 | 3 | 10 |
| 2 | 2 | 3 |
| 3 | 2 | 2 |
+-----------+----------+----------+
必要なものの説明
またはの重複がないペアslave_id
master_id
を選択したいと思います。MIN(distance)
master_id
slave_id
望ましい結果表
+-----------+----------+----------+
| master_id | slave_id | distance |
+-----------+----------+----------+
| 1 | 1 | 0.1 |
| 3 | 2 | 2 |
+-----------+----------+----------+
私の試み
SELECT
join_table.master_id,
join_table.slave_id,
join_table.distance
FROM join_table
INNER JOIN
(
SELECT
slave_id,
MIN(distance) AS distance
FROM join_table
GROUP BY slave_id
) AS self_join
ON self_join.slave_id = join_table.slave_id
AND self_join.distance = join_table.distance
私の試みの何が問題になっていますか
このクエリは、の重複を生成しますmaster_id
どんな助けでも大歓迎です。