Sql 从一个相关表中没有相应记录的表中选择所有记录不起作用
我正在使用GORM和PostgreSQL作为我的存储解决方案。 我找不到任何方法来查询一个表中的所有记录,该表在相关表中没有相应的记录。让我们看看这些表,例如:Sql 从一个相关表中没有相应记录的表中选择所有记录不起作用,sql,postgresql,go,orm,go-gorm,Sql,Postgresql,Go,Orm,Go Gorm,我正在使用GORM和PostgreSQL作为我的存储解决方案。 我找不到任何方法来查询一个表中的所有记录,该表在相关表中没有相应的记录。让我们看看这些表,例如: Computers id int current_gpu_id int (foreign_key to Gpus table) Gpus id int gpu_name string 我正在尝试选择任何计算机中都不存在的所有GPU。我知道这方
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
这些查询在query 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错误还是我做错了什么?您尝试过不存在吗?是的,我使用了:queryString:=从不存在的gpu中选择*从存在计算机的计算机中选择*。current\u gpu\u id=gpus.id db.RawqueryString.Scan&gpu它的行为与以前的查询完全相同。我向数据库添加了4个GPU,它将返回除第一个GPU之外的所有GPU。