Если вы действительно хотите сделать переменную только для чтения, IMHO лучшим способом было бы использовать свойство () с передачей только getter. С помощью свойства () мы можем иметь полный контроль над данными.
class PrivateVarC(object):
def get_x(self):
pass
def set_x(self, val):
pass
rwvar = property(get_p, set_p)
ronly = property(get_p)
Я понимаю, что ОП задал несколько другой вопрос, но так как я нашел другой вопрос, задающий вопрос о том, как отмечать отмеченные дубликаты частных переменных этот, я думал добавить эту дополнительную информацию здесь.
Попробуйте этот запрос, но если бы были какие-то данные, я мог бы проверить, хотя я проверил с фиктивными данными
select
t.token_id,
IFNULL(g.game,'') as Game,
IFNULL(p.name,'') as Prize,
case when g.game != '' then 'Assigned' when p.name != '' then 'Assigned' else 'Not assigned yet' end as `Status`
from token as t
left join (select *
from games
where token_id not in(select
token_id
from prize)) as g
on g.token_id = t.token_id
left join (select *
from prize
where token_id not in(select
token_id
from games)) as p
on p.token_id = t.token_id
EDITED. Тогда это должна быть самая простая вещь
select *
from `user`
left join token
on user.user_id = token.user_id
left join games
on games.token_id = token.token_id
left join prize
on prize.token_id = token.token_id
where user.user_id = 1