联表查询
join()
可以将多个表关联起来查询, 一步到位减少多次调用的逻辑
- @param
tableName
关联的表名 - @param
whereStr
关联条件 - @param
joinType
关联类型 可以为 INNER, LEFT, RIGHT, FULL 默认为LEFT INNER
: 如果表中有至少一个匹配,则返回行LEFT
: 即使右表中没有匹配,也从左表返回所有的行RIGHT
: 即使左表中没有匹配,也从右表返回所有的行FULL
: 只要其中一个表中存在匹配,就返回行
更详细的讲解请看这篇文章
两个表关联
var user []User
err := tg.Db('user').Join("role", "user.id = role.user_id").Where("user.id", "=", 1).Select(&user)
var user []User
err := tg.Db('user').Join("role", "user.id = role.user_id").Where("user.id", "=", 1).Select(&user)
最终的SQL语句为:
SELECT * FROM user LEFT JOIN role ON user.id = role.user_id WHERE user.id = 1
SELECT * FROM user LEFT JOIN role ON user.id = role.user_id WHERE user.id = 1
三个表关联
var user []User
err := tg.Db('user').Join("role", "user.id = role.user_id").Join("auth", "role.id = auth.role_id").Where("user.id", "=", 1).Select(&user)
var user []User
err := tg.Db('user').Join("role", "user.id = role.user_id").Join("auth", "role.id = auth.role_id").Where("user.id", "=", 1).Select(&user)
最终的SQL语句为:
SELECT * FROM user
LEFT JOIN role ON user.id = role.user_id
LEFT JOIN auth ON role.id = auth.role_id
WHERE user.id = 1
SELECT * FROM user
LEFT JOIN role ON user.id = role.user_id
LEFT JOIN auth ON role.id = auth.role_id
WHERE user.id = 1