Почему я получаю в два раза больше записей, чем ожидаю?

#python #sqlalchemy

#python #sqlalchemy

Вопрос:

У меня есть следующая Match таблица:

  ----- --------- ------------------ ------------------- ------------------- ------------------- 
| id_ | tour_id | today_tours_ID_T | today_rounds_ID_R | today_players_ID1 | today_players_ID2 |
 ----- --------- ------------------ ------------------- ------------------- ------------------- 
|   1 |       0 |                1 |                 1 |                 1 |                 2 |
|   2 |       0 |                1 |                 1 |                 3 |                 4 |
|   3 |       1 |                1 |                 1 |                 1 |                 2 |
|   4 |       1 |                1 |                 1 |                 3 |                 4 |
 ----- --------- ------------------ ------------------- ------------------- ------------------- 
  

И следующая games_table таблица:

  ----- -------- -------- ------- ------- ---------- -------- 
| id_ | ID_T_G | ID_R_G | ID1_G | ID2_G | RESULT_G | DATE_G |
 ----- -------- -------- ------- ------- ---------- -------- 
|   1 |      1 |      1 |     1 |     2 | NULL     | NULL   |
|   2 |      1 |      1 |     3 |     4 | NULL     | NULL   |
 ----- -------- -------- ------- ------- ---------- -------- 
  

Я хочу получить записи из game , которые соответствуют записям в match , где связь определяется составным ключом ID столбцов.

Я написал следующий запрос:

 matches = dal.session.query(
    Match.id_,
    games_table.ID_T_G.label("ID_T_G"),
    games_table.ID_R_G.label("ID_R_G"),
    games_table.ID1_G.label("ID1_G"),
    games_table.ID2_G.label("ID2_G"),
    games_table.RESULT_G.label("RESULT_G"),
    games_table.DATE_G.label("DATE_G"),
)
games_matches_p1_winner = dal.session.query(
    games_table.ID_T_G.label("ID_T_G"),
    games_table.ID_R_G.label("ID_R_G"),
    games_table.ID1_G.label("ID1_G"),
    games_table.ID2_G.label("ID2_G"),
).subquery()
matches_p1_winner = (
    matches
    .select_from(Match)
    .join(
        games_matches_p1_winner,
        and_(
            Match.tour_id.__eq__(0),
            (
                Match.today_tours_ID_T
                .__eq__(games_matches_p1_winner.c.ID_T_G)
            ),
            (
                Match.today_rounds_ID_R
                .__eq__(games_matches_p1_winner.c.ID_R_G)
            ),
            (
                Match.today_players_ID1
                .__eq__(games_matches_p1_winner.c.ID1_G)
            ),
            (
                Match.today_players_ID2
                .__eq__(games_matches_p1_winner.c.ID2_G)
            ),
        )
    )
)
  

Я ожидал, что он вернется:

 (1, 1, 1, 1, 2, None, None)
(2, 1, 1, 3, 4, None, None)
  

Но я получаю:

 (1, 1, 1, 1, 2, None, None)
(1, 1, 1, 3, 4, None, None)
(2, 1, 1, 1, 2, None, None)
(2, 1, 1, 3, 4, None, None)
  

Почему я получаю в два раза больше записей, чем ожидаю?