【发布时间】:2022-12-22 19:48:35
【问题描述】:
这些是我数据库中的表
CREATE TABLE vehicles
(
id VARCHAR PRIMARY KEY,
make VARCHAR NOT NULL,
model VARCHAR NOT NULL,
)
CREATE TABLE collisions
(
id VARCHAR PRIMARY KEY,
longitude FLOAT NOT NULL,
latitude FLOAT NOT NULL,
)
CREATE TABLE vehicle_collisions
(
vehicle_id VARCHAR NOT NULL,
collision_id VARCHAR NOT NULL,
PRIMARY KEY (vehicle_id, collision_id)
)
所以我需要找到具有特定 collision_id 的车辆列表。我正在使用 gorm 。
我试图以某种方式实现它
var vehicles []entities.Vehicles
err := r.db.Joins("JOIN vehicles as vh on vh.id=vehicle_collisions.vehicle_id").Where("vehicle_collisions.collision_id=?",
id).Find(&vehicles).Error
if err != nil {
fmt.Println(err)
}
但它让我出错
ERROR: missing FROM-clause entry for table "vehicle_collisions" (SQLSTATE 42P01)
任何帮助将不胜感激。
【问题讨论】:
-
vehicles是[]entities.Vehicles类型,它可能对应于vehicles表。这意味着,如果您将vehicles传递给Find,它将生成一个SELECT * FROM vehicles并向其添加一个连接,例如JOIN vehicles ...没有意义,对吗?这也是它抱怨vehicle_collisions没有FROM clause的原因。所以只需翻转 JOIN 子句中的表,你就可以开始了:go.dev/play/p/-Tv71Setmbl -
谢谢 @mkopriva 准确指出了我的错误,但现在它在
Find(&vehicles).Error上出现恐慌,消息为 `panic serving [::1]:54547: reflect: call of reflect.Value.Field on slice Value` 。 -
你能说明
entities.Vehicles的类型是如何定义的吗?它是一个结构吗?或者它是一片?将声明添加到问题中。 -
没关系,我定义数组并创建数组的数组修复它是一个错误。再次非常感谢您的帮助。最后一件事,如果你可以分享一些书籍或参考资料来为像我这样的 golang 新手学习 Go。
-
我没有读过任何 Go 书籍,只读过官方的language spec、Effective Go指南和我需要使用的任何包的官方documentation。我的一本书听到好的是this one(但同样,我自己还没有读过)。
标签: postgresql go go-gorm