如何修复“缺少表的FROM子句条目”错误

时间:2019-07-31 10:00:44

标签: postgresql go go-gorm

我正在尝试根据游戏ID获取平台的名称。

我有以下三个表,我正在尝试加入它们以获得所需的结果:

      Games

Id | .....| .....|
---|------ ------|
1  | .    | .    |
2  | .    | .    |
3  | .    | .    |
4  | .    | .    |

      Game_Platforms

Id |....|game_id| platform_id|...|
---------------------------------
1  | .  | 1     |   1        |.. |
2  | .  | 1     |   2        |.. |
3  | .  | 3     |   3        |.. |
.. | .  | 4     |   4        |.. |

    Platforms
Id| ...|...| name    |
---------------------|
1 | .  | . | iOS     |
2 | .  | . | Android |
3 | .  | . | Windows |
4 | .  | . | SteamOS |
type Platforms struct {
   Name string
}

var name []Platforms

query = postgres.Db().Select("name").
        Joins("JOIN games ON games.id = game_platforms.game_id").
        Joins("JOIN game_platforms ON game_platforms.platform_id = platforms.id").
        Where("games.id = 1").Find(&name)

我希望获得平台名称,但会收到错误消息:

  

pq:表“ game_platforms”缺少FROM子句条目

我认为我写的Joins命令不正确,但似乎合乎逻辑,也许我错了。

2 个答案:

答案 0 :(得分:1)

您的查询缺少FROM子句。

我假设您想从platforms表中选择数据。如果是,那么(根据您的代码)您应该首先与game_platforms加入,然后与games加入。

query = postgres.Db().Select("name").
    Find("platforms"). // <------ this one
    Joins("JOIN game_platforms ON game_platforms.platform_id = platforms.id").
    Joins("JOIN games ON games.id = game_platforms.game_id").
    Where("games.id = 1").Find(&name)

答案 1 :(得分:1)

所以我的问题的答案并非没有@novalagung的支持
归功于他,所以我需要将查询更改为这样

query = postgres.Db().Select("name").
    Joins("JOIN game_platforms ON game_platforms.platform_id = platforms.id").
    Joins("JOIN games ON games.id = game_platforms.game_id").
    Where("games.id = 1").Find(&name)

但是我遇到一个错误,指出 pq:列引用“名称”不明确
但这是我的错,因为我没有在所有表中指定问题,因此需要做一些小的更改来解决此错误,这是 Select(“ platforms.name”)。