联表查询
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 = 1SELECT * 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 = 1SELECT * FROM user
LEFT JOIN role ON user.id = role.user_id
LEFT JOIN auth ON role.id = auth.role_id
WHERE user.id = 1