当前位置: 首页 > article >正文

MYSQL关联关系查询

关联关系查询

首先,让我们回顾一下你的原始查询:

SELECT u.*, d.id AS aid, d.name, d.pro, d.city, d.country, d.detail, d.tel AS atel, r.name AS roleName
FROM tb_user u
INNER JOIN tb_address d ON u.id = d.user_id
LEFT JOIN tb_role_user ur ON ur.user_id = u.id
LEFT JOIN tb_role r ON r.id = ur.role_id;

这个查询做了以下几件事:

  1. tb_user 表中选择所有列(u.*)。
  2. 使用内连接(INNER JOIN)将 tb_user 表与 tb_address 表关联起来,条件是 tb_user 表的 id 列等于 tb_address 表的 user_id 列。
  3. tb_address 表中选择特定的列,并为某些列指定别名(如 d.id AS aid)。
  4. 使用左外连接(LEFT JOIN)将结果集与 tb_role_user 表关联起来,条件是 tb_role_user 表的 user_id 列等于 tb_user 表的 id 列。
  5. 再使用左外连接将上一步的结果集与 tb_role 表关联起来,条件是 tb_role 表的 id 列等于 tb_role_user 表的 role_id 列。
  6. tb_role 表中选择 name 列,并为其指定别名 roleName

现在,我将对这个查询进行扩写,包括一些额外的解释和可能的优化:

-- 选择用户及其关联的地址、角色信息
SELECT 
    -- 用户表的所有列
    u.id AS userId, u.username, u.email, u.password, u.created_at, u.updated_at,
    -- 地址表的特定列及别名
    d.id AS addressId, d.name AS addressName, d.province AS pro, d.city, d.country, d.detail AS addressDetail, d.tel AS addressTel,
    -- 角色名的别名
    r.name AS roleName
FROM 
    tb_user u
    -- 内连接:只选择有地址的用户
    INNER JOIN tb_address d ON u.id = d.user_id
    -- 左外连接:选择所有用户及其可能的角色关联
    LEFT JOIN tb_role_user ur ON u.id = ur.user_id
    -- 再左外连接:选择所有角色关联及其角色名
    LEFT JOIN tb_role r ON ur.role_id = r.id;

http://www.kler.cn/a/540056.html

相关文章:

  • DDR原理详解
  • Kafka 的消费offset原来是使用ZK管理,现在新版本是怎么管理的?
  • jemalloc的malloc案例来分析GOT表和PLT表有关流程
  • 【大数据技术】搭建完全分布式高可用大数据集群(ZooKeeper)
  • PostgreSQL 18新特性之DML语句RETURNING增强
  • Linux系统-centos防火墙firewalld详解
  • STM32+Proteus+DS18B20数码管仿真实验
  • w200基于spring boot的个人博客系统的设计与实现
  • Logo语言的学习路线
  • 一种基于Leaflet.Legend的图例动态更新方法
  • Spring Boot极速入门:从零搭建第一个Web应用
  • 科技赋能直播!DeepSeek大模型+智享AI直播第三代plus版本,未来直播将更加智能化!
  • react 18父子组件通信
  • PHP音视频课程培训系统
  • Cesium 离线加载瓦片图
  • pytest+request+yaml+allure 接口自动化测试全解析[手动写的跟AI的对比]
  • collabora online+nextcloud+mariadb在线文档协助
  • HTTP/3与QUIC的关系是什么?
  • 如何排查主板硬件问题的常见方法?
  • ESP32S3读取数字麦克风INMP441的音频数据
  • LeetCode 3444.使数组包含目标值倍数的最小增量
  • 安装mariadb+galera搭建数据库集群
  • 安全研究员职业提升路径
  • 运维_Mac环境单体服务Docker部署实战手册
  • 《手札·开源篇》数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%?
  • ElementUI的常用组件及使用技巧