如何在GORM(golang)中使用where子句和order by对多个表进行联合查询

5

我正在尝试对多个表进行列选择的联合,然后对结果集进行where子句和order by子句运算。 我该如何在GORM(Go语言)中编写此代码?

我尝试了以下片段,但未在数据库查询中运行where和order by子句:

var union []map[string]interface{}
database.CONNECTION.Raw("? UNION ?",
    database.CONNECTION.Select(ContentAttributes).Model(&model1{}),
    database.CONNECTION.Select(ContentAttributes).Model(&model2{}),
).Where("id > ?", 1).Order("Name").Scan(&union)

注意: ContentAttributes 是一个包含我想要选择的属性的字符串切片。

它正在运行以下查询:

SELECT "id","name","created_at","updated_at" FROM "model1" WHERE "model1"."deleted_at" IS NULL UNION SELECT "id","name","created_at","updated_at" FROM "model2" WHERE "model2"."deleted_at" IS NULL

我原本期望这个操作在合并结果集时会运行 where 条件和 order by 子句。但实际上它只是执行了 union 操作,并将结果收集到了 union 变量中。请给出一种解决方法。

1个回答

1

不确定这是否是最干净的方法,但它有效。

var db = database.CONNECTION
var union []map[string]interface{}
var raw = "SELECT * (? UNION ?) union WHERE union.id > ? ORDER BY union.name"

db.Raw(raw,
    db.Select("*").Model(&model1{}),
    db.Select("*").Model(&model2{}),
    1
).Scan(&union) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接