Select [PostgreSQL MySQL]
Example
To select into a struct, define a and use SelectQueryopen in new window:
err := db.NewSelect().Model(book).Where("id = ?", 123).Scan(ctx)
count, err := db.NewSelect().Model((*User)(nil)).Count(ctx)
Because selecting and counting rows is a common operation, Bun also provides :
var users []User
count, err := db.NewSelect().Model(&users).Limit(20).ScanAndCount(ctx)
if err != nil {
}
fmt.Println(users, count)
EXISTS
SELECT EXISTS (SELECT * FROM users WHERE name LIKE '%foo%')
To select a book and manually join the book author:
err := db.NewSelect().
Model(book).
ColumnExpr("book.*").
ColumnExpr("a.id AS author__id, a.name AS author__name").
Join("JOIN authors AS a ON a.id = book.author_id").
OrderExpr("book.id ASC").
Limit(1).
Scan(ctx)
FROM books
JOIN authors AS a ON a.id = book.author_id
LIMIT 1
JOIN authors AS a ON a.id = book.author_id AND a.deleted_at IS NULL
Subqueries
You can use Bun queries (including INSERT
, UPDATE
, and DELETE
queries) as a subquery:
subq := db.NewSelect().Model((*Book)(nil)).Where("author_id = ?", 1)
err := db.NewSelect().Model().TableExpr("(?) AS book", subq).Scan(ctx, &books)
SELECT * FROM (
SELECT "book"."id", "book"."title", "book"."text"
) AS book