Ответ
В Go можно использовать Common Table Expressions (CTE) при работе с базами данных через SQL-запросы. CTE — это временные результаты запроса, которые можно ссылаться в основном запросе.
Пример с database/sql и PostgreSQL:
query := `
WITH recent_users AS (
SELECT id, name FROM users WHERE created_at > NOW() - INTERVAL '7 days'
)
SELECT * FROM recent_users ORDER BY name;
`
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
CTE поддерживаются большинством СУБД (PostgreSQL, MySQL, SQLite и др.), но синтаксис может незначительно отличаться. В Go сам язык не обрабатывает CTE — это выполняется на стороне БД.