Skip to content

联表查询


join()

可以将多个表关联起来查询, 一步到位减少多次调用的逻辑

  • @param tableName 关联的表名
  • @param whereStr 关联条件
  • @param joinType 关联类型 可以为 INNER, LEFT, RIGHT, FULL 默认为LEFT
  • INNER: 如果表中有至少一个匹配,则返回行
  • LEFT: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT: 即使左表中没有匹配,也从右表返回所有的行
  • FULL: 只要其中一个表中存在匹配,就返回行

更详细的讲解请看这篇文章

【MySQL】 left join、right join和join的区别

两个表关联

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

备案号:冀ICP备20015584号-5