跨表查询经常有,何为跨表更新?

本文介绍了在MySQL中如何进行跨表更新,通过一个实际的场景——更新员工表的绩效信息,详细解释了使用UPDATE JOIN的语法和示例,包括INNER JOIN和LEFT JOIN的应用,以及在特定情况下如何处理NULL值的问题。

有点 SQL 基础的朋友肯定听过 「跨表查询」,那啥是跨表更新啊?

背景

项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为

t_dept_members, 系统中有另外一张表 t_user_info 记录了人员信息。要求将 t_dept_members 中有变化的信息更新到 t_user 表中,这个需求就是「跨表更新」啦

憨B SQL 直接被秒杀

不带脑子出门的就写出了下面的 SQL

看到身后 DBA 小段总在修仙,想着让他帮润色一下😜,于是发给了他,然后甩手回来就是这个样子:

看到这个 SQL 语句我都惊呆了,还能这样写,在无情的嘲笑下,一声 KO 我直接倒下。死也得死的明白,咱得查查这是咋回事啊

Mysql Update Join

我们经常使用 join 查询表中具有(在 INNER JOIN 情况下)或可能没有(在 LEFT JOIN 情况下)另一个表中匹配行的表中的行。

同样,在 MySQL 中, 我们也可以在 UPDATE 语句中使用 JOIN 子句执行跨表更新,语法就是这样:

UPDATE T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1
SET T1.C2 = T2.C2,
    T2.C3 = expr
WHERE condition

我们还是详细的说明一下上面的语法:

  • 首先,在 UPDATE 子句之后,指定主表(T1)和希望主表联接到的表(T2)。请注意,必须在UPDATE 子句之后至少指定一个表
  • 接下来,指定你要使用的联接类型,即 INNER JOIN 或 LEFT JOIN 以及联接谓词。 JOIN子句必须出现在 UPDATE 子句之后(这个大家都是知道的哈)
  • 然后,将新值分配给要更新的 T1或 T2 表中的列
  • 最后,在 WHERE 子句中指定一个条件以将行限制为要更新的行

如果你遵循 update 语法,你会发现有另外一种语法也可以完成跨表更新

UPDATE T1, T2
SET T1.c2 = T2.c2,
      T2.c3 = expr
WHERE T1.c1 
<think>好的,用户现在问的是CentOS下文件的绝对路径和相对路径是什么。之前他已经问过root的家目录的位置,现在这个问题也是关于路径的,看来他可能在学习Linux的基础文件系统结构。我需要先确认他是否了解Linux的文件系统基本概念,比如根目录、目录结构等。 绝对路径和相对路径的区别是基础但重要的知识点。绝对路径是从根目录开始的完整路径,而相对路径是相对于当前工作目录的路径。用户可能刚接触这些概念,所以需要用简单明了的例子来解释。 首先,我需要定义绝对路径,强调它以斜杠开头,涵盖从根目录到目标文件或目录的所有层级。例如,/home/user1/Documents/report.txt。这里可以提到绝对路径的唯一性,无论当前目录在哪里,绝对路径都能准确定位文件。 然后是相对路径,它不以斜杠开头,而是基于当前所在的目录。比如,如果当前在/home/user1,那么Documents/report.txt就是相对路径。还可以举一些常见的相对路径符号,比如“.”示当前目录,“..”示上级目录。例如,如果当前在/home/user1/Documents,想访问上级目录下的Downloads,可以使用../Downloads。 接下来,比较两者的使用场景。绝对路径在脚本或程序中更可靠,因为它不受当前工作目录的影响。而相对路径在命令行操作时更方便,特别是当目录结构较深时,可以减少输入的长度。 用户可能需要知道如何查看当前工作目录,可以用pwd命令。同时,如何切换目录的示例,比如cd命令使用绝对或相对路径,这样他能更直观地理解两者的区别。 另外,用户之前的问题涉及到root的家目录,可能他有权限管理相关的疑问,但这个问题更基础,所以暂时不需要涉及权限问题,专注于路径的区分即可。 需要检查是否有其他相关细节需要注意,比如符号链接对路径的影响,但可能用户现阶段不需要这么深入的内容,保持解释简洁。 最后,确保例子清晰,对比明确,帮助用户理解在不同情况下如何使用两种路径。可能用户的实际使用场景包括编写脚本、命令行导航或配置文件设置,这些例子都能帮助他应用所学知识。</think>在 CentOS 系统中,文件路径分为 **绝对路径** 和 **相对路径**,以下是逐步说明: --- ### **一、绝对路径** **定义** 从根目录 `/` 开始的完整路径,唯一标识文件/目录的位置,**与当前工作目录无关**。 **特点** - 以 `/` 开头 - 完整描述文件层级关系 - 示例: - `/home/user1/Documents/report.txt` - `/etc/ssh/sshd_config` - `/root/.bashrc` **使用场景** - 脚本中引用文件(避免路径歧义) - 目录操作时(如从 `/var/log` 访问 `/opt/app/config.conf`) --- ### **二、相对路径** **定义** 基于当前工作目录(通过 `pwd` 查看)的路径,**依赖上下文环境**。 **特点** - 不以 `/` 开头 - 使用 `.`(当前目录)或 `..`(上级目录)简化路径 - 示例: - 当前目录是 `/home/user1` 时: - `Documents/report.txt`(等价于绝对路径 `/home/user1/Documents/report.txt`) - `../Downloads/file.zip`(指向 `/home/Downloads/file.zip`) **使用场景** - 命令行快速操作(减少输入长度) - 操作同一父目录下的子目录时 --- ### **三、对比与操作示例** | **类型** | **绝对路径** | **相对路径** | |------------|----------------------------------|--------------------------| | 起点 | 根目录 `/` | 当前工作目录 | | 唯一性 | 全局唯一 | 依赖当前目录 | | 切换目录 | `cd /usr/local/bin` | `cd ../../local/bin` | | 查看当前路径 | `pwd`(输出绝对路径) | - | --- ### **四、验证方法** 1. **查看当前工作目录** ```bash pwd # 输出示例:/home/user1 ``` 2. **绝对路径操作** ```bash cat /var/log/messages # 直接定位到根目录下的文件 ``` 3. **相对路径操作** ```bash cd Documents # 进入当前目录下的 Documents 子目录 ls ../Downloads # 列出上级目录中的 Downloads 内容 ``` --- **总结** - **绝对路径**:精准但冗长,适合稳定引用 - **相对路径**:灵活但依赖上下文,适合快速操作 - 通过 `pwd` 和 `cd` 命令可验证路径逻辑
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值