> Напиши SQL запрос для выбора всех чатов пользователя с именем Вася (Go)

Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

Предположим, что у нас есть таблицы users (id, name) и chats (id, name), а также связующая таблица user_chats (user_id, chat_id). Запрос будет выглядеть так:

SQL
SELECT c.id, c.name
FROM chats c
JOIN user_chats uc ON c.id = uc.chat_id
JOIN users u ON uc.user_id = u.id
WHERE u.name = 'Вася';

Если же чаты хранятся в одной таблице с полем user_id (например, каждый чат принадлежит одному пользователю), то запрос упрощается:

SQL
SELECT id, name
FROM chats
WHERE user_id = (SELECT id FROM users WHERE name = 'Вася');

В Go для выполнения такого запроса можно использовать database/sql:

GO
var chats []Chat
rows, err := db.Query(`
SELECT c.id, c.name
FROM chats c
JOIN user_chats uc ON c.id = uc.chat_id
JOIN users u ON uc.user_id = u.id
WHERE u.name = $1`, "Вася")
if err != nil {
// обработка ошибки
}
defer rows.Close()
for rows.Next() {
var chat Chat
if err := rows.Scan(&chat.ID, &chat.Name); err != nil {
// обработка ошибки
}
chats = append(chats, chat)
}

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью