Выбор всех записей из одной таблицы, у которой нет соответствующих записей в связанной таблице, не работает - PullRequest
0 голосов
/ 02 декабря 2019

Я использую 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 ошибка или я что-то не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...