Я использую GORM и PostgreSQL в качестве решения для хранения данных. Я не могу найти способ запросить все записи из одной таблицы, которая не имеет соответствующих записей в связанной таблице. Давайте посмотрим на эти таблицы, например:
Computers
id int
current_gpu_id int (foreign_key to Gpus table)
Gpus
id int
gpu_name string
Я пытаюсь выбрать все графические процессоры, которых нет ни на одном компьютере. Я знаю, что есть несколько вариантов для этого:
SELECT * FROM gpus WHERE gpus.id NOT IN (SELECT current_gpu_id FROM computers)
or
SELECT * FROM gpus left join computers on computers.current_gpu_id = gpus.id where computers.current_gpu_id is null
Эти запросы прекрасно работают в запросе pgAdmin Query Tool, но не работают в коде GO GORM.
gpus := make([]Gpu, limit)
// Option 1
db.Joins("left join computers on computers.current_gpu_id = gpus.id").Where("computers.current_gpu_id is null").Find(&gpus)
// Option 2
queryString := "SELECT * FROM gpus WHERE gpus.id NOT IN (SELECT current_gpu_id FROM computers)"
db.Raw(queryString).Scan(&gpus)
// Option 3
db.Table("gpus").Select("gpus.id, gpus.sn, gpus.name").Joins("left join computers on computers.current_gpu_id = gpus.id").Where("computers.current_gpu_id is null").Scan(&gpus)
ЭтоGORM ошибка или я что-то не так делаю?