Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从一个相关表中没有相应记录的表中选择所有记录不起作用_Sql_Postgresql_Go_Orm_Go Gorm - Fatal编程技术网

Sql 从一个相关表中没有相应记录的表中选择所有记录不起作用

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。我知道这方

我正在使用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
这些查询在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。