Как взять данные из sqlite3 select в другой sqlite3 запрос в where?

Основной вопрос и проблема:

У меня есть две таблица - roulette_users и users. Мне нужно взять user_id из roulette_users и используя его сделать запрос SELECT из users где user_id в 1 и 2 столбце равны. Не понимаю как это сделать без внешнего for, может быть есть какие то вариации, где я могу приравнять where к for из первой таблицы?

Если просто прописать, for user_game in users_game - Тут я беру данные из первой таблицы, - то данные во второй таблиице не будут найдены и запрос будет пустым.

Уточнение:

Именно так мне нужно расписать, потому что потом выводится сообщение со всеми пользователями и их результатами. Если ставить это сообщение в for, то у меня выводится не одно сообщение, а множество сообщений - их количество равно количеству пользователей в roulette_users.

Фрагмент из кода с выводом данных:

                cur.execute('SELECT user_id, bid, bid_money FROM roulette_users WHERE group_id=("%s")' % group_id)
                users_game = cur.fetchall()
                conn.commit()

                cur.execute('SELECT nickname, balance FROM users WHERE user_id=("%s")' % (for user_game[0] in users_game))
                users = cur.fetchall()
                conn.commit()

Весь код:

    if message.chat.id < 0:
        if rt == 'го':
            conn = sqlite3.connect('database.db', check_same_thread=False)
            cur = conn.cursor()

            cur.execute('SELECT group_id FROM roulette WHERE group_id=("%s")' % group_id)
            group_info = cur.fetchall()
            conn.commit()

            result = 2

            if len(group_info) == 0:
                return
            else:
                cur.execute('SELECT user_id, bid, bid_money FROM roulette_users WHERE group_id=("%s")' % group_id)
                users_game = cur.fetchall()
                conn.commit()

                cur.execute('SELECT nickname, balance FROM users WHERE user_id=("%s")' % (for user_game[0] in users_game))
                users = cur.fetchall()
                conn.commit()

                print(users)

                for user_game in users_game:
                    #  result = random.randint(0, 36)
                    bid = user_game[1]
                    bid_money = user_game[2]

                    if bid == result:
                        cur.execute('UPDATE users SET balance=balance+("%s") WHERE user_id=("%s")' % (
                            bid_money * 2, user_game[0]))
                        conn.commit()

                    cur.execute('DELETE FROM roulette_users WHERE group_id=("%s")' % group_id)
                    conn.commit()

                bot.send_message(message.chat.id, text="Результаты рулетки: \n\n" + "\n".join(
                    f'[{user[0]}](tg://user?id={user_game[0]}) вы {f"выиграли {user_game[2] * 2}?" if user_game[1] == result else f"проиграли {user_game[2]}?"}'
                    for user_game in users_game for user in users), parse_mode='Markdown', disable_web_page_preview=True)

                cur.execute('DELETE FROM roulette WHERE group_id=("%s")' % group_id)
            cur.close()
            conn.close()

Возможно кто-то мог бы помочь с более правильным выводом итогового сообщения, чтобы я не сталкивался с проблемами, которые описал.

Таблицы:

roulette: roulette

roulette_users: roulette_users

users: users


Ответы (2 шт):

Автор решения: CausonQ
SELECT *
FROM roulette_users tbl1
LEFT JOIN users tbl2 ON tbl2.user_id=tbl1.user_id

В выборке будут все столбцы из двух таблиц и соединены будут по полю user_id. Если я верно понял, что все такие нужно достать

* использовать нежелательно, лучше перечислить необходимые столбцы, например:

tbl1.user_id, tbl1.group_id, tbl2.balance
→ Ссылка
Автор решения: mrBars1k

Если я правильно понял Вашу задачу, то можно использовать оператор JOIN, который объединяет таблицы. Затем добавить условие.

cur.execute("""SELECT users.*
    FROM roulette_users
    JOIN users ON roulette_users.user_id = users.user_id""")

data = cur.fetchall()


for i in data:
    print(i)

Есть также способ через вложенный запрос:

cur.execute("""SELECT *
    FROM users
    WHERE user_id IN (SELECT user_id FROM roulette_users)""")

data = cur.fetchall()


for i in data:
    print(i)

Дополнительно:

Для запроса SELECT не нужно использовать commit.

Если задача отличается, то напишите в комментариях, я постараюсь изменить ответ на более подходящий.

→ Ссылка