gpt4 book ai didi

mysql - 如何在gorm中串连?

转载 作者:行者123 更新时间:2023-12-03 10:10:28 24 4
gpt4 key购买 nike

我想写一个查询

SELECT table_a.*, table_c.* 
FROM table_a
LEFT JOIN table_b ON table_a.id = table_b.table_a_id
LEFT JOIN table_c ON table_b.id = table_c.table_b_id
WHERE table_a.column_a = 'a_value',
AND table_c.column_b = 'some_value'
AND table_c.column_c = 'another_value';
编辑:我错过了一个重要点,即 where子句变量不是固定的。根据输入,每个表可能使用更多或更少的列。
目前,我的查询看起来像
db.Table("table_a").
Joins("left join table_b on table_a.id = table_b.table_a_id").
Joins("left join table_c on table_b.id = table_c.table_b_id").
Select("table_a.*, table_c.*").
Table("table_a").Where(map[string]interface{}{"column_a": "value"}).
Table("table_c").Where(map[string]interface{}{
"column_b": "some_value",
"column_c": "another_value",
}).
Find(&elem)
但是,记录的SQL语句是
SELECT table_a.*, table_c.* 
FROM `table_c` # gorm gives the wrong starting table, should be table_a
LEFT JOIN table_b ON table_a.id = table_b.table_a_id
LEFT JOIN table_c ON table_b.id = table_c.table_b_id
WHERE (`table_c`.`column_a` = 'value') # wrong table again
AND (`table_c`.`column_b` = 'some_value')
AND (`table_c`.`column_c` = 'another_value')
我不确定这里是什么问题。使用这种语法是否无法同时查询不同的表?我宁愿尽量避免使用原始查询。
更新:我已经尝试过动态生成SQL where子句,但是如果gorm提供了更直接的方法,我会优先考虑。

最佳答案

您不需要调用许多Table方法。它使用您调用的最后一个来构造SQL查询。
相反,一旦连接了表,就可以在连接后的Where语句中使用它们。
试试这个:

db.Table("table_a").
Joins("left join table_b on table_a.id = table_b.table_a_id").
Joins("left join table_c on table_b.id = table_c.table_b_id").
Select("table_a.*, table_c.*").
Where("table_a.column_a = ?", "value").
Where("table_c.column_b = ? AND table_c.column_c = ?", "some_value", "another_value").
Find(&elem)

关于mysql - 如何在gorm中串连?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66010055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com