从一个表中选择在相关表中没有对应记录的所有记录都行不通

时间:2019-12-01 21:18:21

标签: 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。我知道有几种选择:

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错误还是我做错了什么?

0 个答案:

没有答案