#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)
Почему я получаю в два раза больше записей, чем ожидаю?