単勝オッズ、単勝払戻金、人気順のテーブルを作成するSQL文

この投稿は私が作った競馬データベースJVData To SQLiteを前提にしています。

これから、ある条件にマッチするレースを抽出して回収率(利益率)を計算したいので、まずは、

  • レースID
  • 馬番
  • 単勝オッズ
  • 単勝払戻金
  • 人気順

の5つのフィールドをデータベースから取り出したい。

これらフィールドは、それぞれ

  • レースID --> レース関係のテーブルには全て含まれていて、テーブル同士をリンクしている。
  • 馬番 --> オッズ単勝払戻単勝テーブルにあり、レースIDでリンクしている。
  • 単勝オッズ --> オッズ単勝テーブルにあり、レースID馬番でリンクしている。
  • 単勝払戻金 --> 払戻単勝テーブルにあり、レースID馬番でリンクしている。
  • 人気順 --> オッズ単勝払戻単勝テーブルにある。

のテーブルに分かれているので、

setup.sqlite3データベースから、オッズ単勝テーブル、払戻単勝テーブルの2つのテーブルから、

レースID 馬番 単勝オッズ 単勝払戻金 人気順
というテーブルををSQL文で結合して取り出します。

オッズ単勝テーブルと払戻単勝テーブルのの2つをJOINすればいいから、

SELECT オッズ単勝.レースID AS RaceID,
       オッズ単勝.馬番 AS HorseNumber,
       オッズ単勝.オッズ AS OddsTansho,
       オッズ単勝.人気順 AS PopularTansho,
       払戻単勝.払戻金 AS RefundTansho
FROM オッズ単勝
JOIN 払戻単勝 ON オッズ単勝.レースID = 払戻単勝.レースID
            AND オッズ単勝.馬番 = 払戻単勝.馬番

このSQL文を実行すると、

out1

となって明らかにおかしい。

主キーがレースID馬番の2つあるのに、

オッズ単勝.レースID = 払戻単勝.レースID
            AND オッズ単勝.馬番 = 払戻単勝.馬番

と別々にマッチさせているからだ。

どうすればいいんだろう。

調べ中。