SQL оператор, имеющий дело с JOINS для PostgreSQL - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть структура базы данных:

таблица пользователей:

- id
- first_name
- last_name
- fire_id (FOREIGN KEY)

таблица соответствий:

id
winner_id (RELATIONSHIP TO "fire_id" IN USERS TABLE) string
loser_id (RELATIONSHIP TO "fire_id" IN USERS TABLE) string
pot_amount int
player1_id (RELATIONSHIP TO "fire_id" IN USERS TABLE) string
player2_id (RELATIONSHIP TO "fire_id" IN USERS TABLE) string
game_id (RELATIONSHIP TO "id" in GAMES TABLE) int
in_progress (BOOLEAN)

таблица игр:

id
name
console

Я пытаюсь построить оператор SQL для PostgreSQL. Вот что я хочу сделать. Создайте запрос, который получает все совпадения, что in_progress имеет значение false. Также присоединится к таблице пользователей и включит player1, и если player2 не равен NULL, в него также войдет player2. Он также будет включать игру в запрос, основанный на "game_id" совпадения.

Если бы кто-нибудь мог помочь мне в создании этого запроса, я был бы очень признателен. Спасибо

На данный момент у меня есть следующий запрос, но он возвращает строку для player1 и другую строку для player2

SELECT *
FROM matches
JOIN users ON matches.player1_id = users.fire_id OR matches.player2_id = users.fire_id
LEFT JOIN games ON matches.game_id = games.id

1 Ответ

1 голос
/ 10 февраля 2020

Вам нужно присоединиться к users дважды, один раз для каждого игрока. Обратите внимание, что join для игрока 2 должно быть left join, поскольку второго игрока может не быть:

SELECT    *
FROM      matches
JOIN      users ON matches.player1_id = users.fire_id 
LEFT JOIN users ON matches.player2_id = users.fire_id
LEFT JOIN games ON matches.game_id = games.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...