专栏首页hotqin888的专栏树状数据库表查询2次以上(自连接、内连接、别名)方法

树状数据库表查询2次以上(自连接、内连接、别名)方法

https://blog.csdn.net/qq_15058425/article/details/78506193

https://blog.csdn.net/qq_43998763/article/details/103528559

https://blog.csdn.net/zhangt85/article/details/40544165

https://www.cnblogs.com/baiyuhong/p/9753173.html

对于树状结构的数据库表,如何在一个表中查询多次,开始走了不少弯路,比如想尝试用子查询,方向不对。其实就是join查询使用数据库表别名(改变数据表名称)即可。

//价值表带mark分值
type UserMeritTopic2 struct {
	// gorm.Model
	Id         int64  `json:"id"`
	Title      string `json:"title"`
	Title1     string `json:"title1"`     //价值分类名称
	Title2     string `json:"title2"`     //价值分类名称
	Title3     string `json:"title3"`     //价值分类名称
	TopicTitle string `json:"topictitle"` //价值内容名称
	Mark       int    `json:"mark"`
	Content    string `json:"content"`
	User       User
}

//测试查询,希望查询出树状结构表的父子孙
//最后用join查询重命名来解决了。
func GetMeritTopic2(mid, uid int64, state int) (usermerittopics []*UserMeritTopic2, err error) {
	db := GetDB()

	err = db.Table("admin_merit").Select("t2.title as title2,t1.title as title1,admin_merit.title as title,admin_merit_mark.mark as mark,merit_topic.title as topic_title,merit_topic.content as content").
		Where("admin_merit.parent_id=?", mid).
		Joins("INNER JOIN admin_merit AS t1 ON t1.id = admin_merit.parent_id").
		Joins("INNER JOIN admin_merit AS t2 ON t2.id = t1.parent_id").
		Joins("left JOIN merit_topic on merit_topic.merit_id=admin_merit.id").
		Where("merit_topic.user_id = ? AND merit_topic.state=?", uid, state).
		Joins("left JOIN admin_merit_mark on admin_merit_mark.merit_id = merit_topic.merit_id").
		Scan(&usermerittopics).Error
	return usermerittopics, err
}

gorm的查询结果如下: 

[
  {
    "id": 0,
    "title": "大型",
    "title1": "专业负责人",
    "title2": "项目管理类",
    "title3": "",
    "topictitle": "阿斯顿发生发送的",
    "mark": 4,
    "content": "阿斯蒂芬",
  }
]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「资深前端工程师总结」前端面试知识点大全—计算机基础知识

    3)、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

    用户5997198
  • MYSQL面试常考知识点总结

    第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

    Java帮帮
  • MySQL架构与执行流程

      MySQL数据库自己用了也有两三年了,基本上只是掌握增删改查的sql语句,从没有思考过MySQL的内部到底是怎么根据sql查询数据的,包括索引的原理,只知道...

    会说话的丶猫
  • Python后端技术栈(六)--数据库

    What makes you different or weird—that’s your strength.

    小闫同学啊
  • impala入门,从基础到架构!!!

    impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比spa...

    大数据梦想家
  • PHP 面试知识梳理

    算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉...

    wangxl
  • PHP 面试知识梳理

    算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉...

    程序员宝库
  • PHP面试知识梳理

    B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉。

    IT派
  • 面试必备!91 道 MySQL 面试题(含答案)

    结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。

    Python进击者
  • PHP 面试知识梳理

    算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉...

    wangxl
  • Java面经——数据库

    所有java面经系列已同步到我的github,欢迎访问https://github.com/tzfun/Java-Interview-experience,记得...

    beifengtz
  • 12道Mysql常见的面试题

    在 MySQL 数据库中,支持上面四种隔离级别,默认的为 Repeatable read (可重复读);而在 Oracle 数据库中,只支持 Serializa...

    wscats
  • impala的介绍

    impala是 cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要...

    用户4870038
  • 知识点提纲1. 二叉树的深度数据库:操作系统计算机网络

    JavaEdge
  • MySQL进阶知识(最全)(精美版)

    脏读:读取到了没有提交的数据, 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的 数据是脏数据。 不可重复读:同⼀条命令...

    CaesarChang张旭
  • MySQL 之 索引原理与慢查询优化

    浏览目录 一 索引介绍 二 索引方法 三 索引类型 四 聚合索引和辅助索引  五 测试索引 六 正确使用索引 七 组合索引 八 注意事项 九 查询计划 十 慢日...

    人生不如戏
  • SQL重要知识点梳理!

    有读者留言面试有点虚,数据库都忘的差不多了,与其临时抱佛脚,不如我们把MySQL的知识点梳理一遍,心中有知识点,面试不慌。

    Datawhale
  • mysql的基本操作

    py3study
  • 『数据库』数据库的查询可不是只知道Select就可以的--关系数据库系统的查询处理

    一、关系数据库系统的查询处理 1.查询处理步骤 关系数据库管理系统查询处理阶段 : 1)查询分析 :对查询语句进行扫描、词法分 析和语法分析

    风骨散人Chiam

扫码关注云+社区

领取腾讯云代金券