Добавление условного дополнительного поля к результату запроса - PullRequest
0 голосов
/ 20 июня 2020

У меня есть эти две таблицы

ТАБЛИЦА 1 (турнирные_данные)

tournament_id | accound_id | data1 | data2

ТАБЛИЦА 2 (турниры_подписки)

tournament_id | account_id

Здесь мне нужно прочитать данные таблица 1, как это

SELECT data1,data2 from tournaments_data WHERE 1

, добавление дополнительного поля к результату каждой строки, который должен быть истинным, если указанный c account_id подписан на указанный турнир c, и должен быть ложным, если account_id не подписан. Account_id подписывается на турнир, если мы можем найти строку во второй таблице, где accound_id связан с определенным c Tournament_id. Практический пример

tournament_id | account_id | data1 | data2
      1             1        data1a  data2a
      2             5        data1b  data2b

tournament_id | account_id
      1             1

Ожидаемый результат

data1a data2a true
data1b data2b false

запрос account_id = 1. Надеюсь, это достаточно ясно.

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Вы можете использовать LEFT JOIN. SQL находится ниже:

SELECT TD.*, CASE WHEN TS.tournament_id IS NULL THEN 'false' ELSE 'true' END AS flag
FROM tournaments_data AS TD
LEFT JOIN tournaments_subscriptions AS TS 
ON TS.tournament_id = TD.tournament_id AND TS.accound_id = TD.accound_id

DB FIDDLE LINK: Здесь

0 голосов
/ 20 июня 2020

Я предположил, что оба столбца названы account_id, и произошла опечатка.

Вы можете использовать LEFT JOIN. Например:

select
  d.data1,
  d.data2,
  case when s.tournament_id is null then 'false' else 'true' end
from tournaments_data d
left join tournaments_subscriptions s
   on s.tournament_id = d.tournament_id
  and s.account_id = d.account_id
  and s.account_id = 1 -- specific account

Результат:

data1   data2   case w...
------  ------  ---------
data1a  data2a  true
data1b  data2b  false

См. Рабочий пример на DB Fiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...