我正在使用GORM和PostgreSQL作为存储解决方案。 我找不到任何一种方法来查询一个表中的所有记录,这些表在相关表中没有对应的记录。让我们看一下这些表,例如:
Computers
id int
current_gpu_id int (foreign_key to Gpus table)
Gpus
id int
gpu_name string
我正在尝试选择所有计算机中不存在的所有GPU。我知道有几种选择:
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查询工具中可以完美地工作,但不能在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错误还是我做错了什么?