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

SQL多表查询完全指南:JOIN的7种用法详解(附完整代码注释)

SQL多表查询完全指南JOIN的7种用法详解附完整代码注释数据分析师写SQL最容易卡住的地方不是聚合不是窗口函数——是JOIN。不是不会写是写了出错不知道为什么。是知道有7种JOIN但记不清哪种该用哪种。这篇文章把JOIN的7种用法全部跑通每种配一个真实场景和完整代码注释。一、为什么要用JOIN先说一个真实场景。你有两张表orders订单表order_id, user_id, amount, created_atusers用户表user_id, user_name, city, register_date业务问了你一个问题每个城市的用户总共下了多少单、消费了多少钱订单里没有城市用户表里没有订单数据。你需要把两张表拼起来——这就是JOIN存在的原因。SQL中JOIN是把多张表通过共同字段通常是ID连接在一起的操作。理解了这个核心7种JOIN不过是拼的方式不同而已。二、建表与测试数据先建两张表后面所有示例都用这组数据。-- 建用户表 CREATE TABLE users ( user_id INT PRIMARY KEY, user_name VARCHAR(50), city VARCHAR(50), register_date DATE ); -- 插入测试数据包含一些特殊情况 INSERT INTO users VALUES (1, 张三, 北京, 2024-01-15), (2, 李四, 上海, 2024-02-20), (3, 王五, 广州, 2024-03-10), (4, 赵六, 深圳, 2024-04-05), (5, 孙七, 成都, 2024-05-18); -- 注意user_id5的孙七没有对应订单 -- 建订单表 CREATE TABLE orders ( order_id INT PRIMARY KEY, user_id INT, amount DECIMAL(10,2), created_at DATE ); INSERT INTO orders VALUES (1001, 1, 299.00, 2024-06-01), (1002, 1, 158.50, 2024-06-15), (1003, 2, 420.00, 2024-06-20), (1004, 3, 88.00, 2024-07-01), (1005, 6, 350.00, 2024-07-10); -- 注意user_id6的订单在users表里找不到对应用户脏数据这两张表故意埋了两个坑user_id5的用户孙七没有订单user_id6的订单没有对应用户接下来7种JOIN结果会因为这两个坑而产生不同——这正是理解JOIN的关键。三、7种JOIN详解1. INNER JOIN内连接——最常用取交集核心逻辑只返回两表中都能匹配上的行。-- INNER JOIN查询有订单记录的用户信息 SELECT u.user_id, u.user_name, u.city, o.order_id, o.amount FROM users AS u INNER JOIN orders AS o ON u.user_id o.user_id ORDER BY u.user_id; /* 执行结果 user_id | user_name | city | order_id | amount 1 | 张三 | 北京 | 1001 | 299.00 1 | 张三 | 北京 | 1002 | 158.50 2 | 李四 | 上海 | 1003 | 420.00 3 | 王五 | 广州 | 1004 | 88.00 注意 - user_id4赵六没有订单不出现 - user_id5孙七没有订单不出现 - user_id6的订单没有对应用户不出现 只返回两表都有匹配的4行数据 */使用场景只关心两边都有的数据时用INNER JOIN。比如分析下过单的用户行为。2. LEFT JOIN左连接——以左表为主右表补充核心逻辑返回左表所有行右表能匹配上就填数据匹配不上填NULL。-- LEFT JOIN查询所有用户有订单的展示订单没有的也展示 SELECT u.user_id, u.user_name, u.city, o.order_id, o.amount FROM users AS u LEFT JOIN orders AS o ON u.user_id o.user_id ORDER BY u.user_id; /* 执行结果 user_id | user_name | city | order_id | amount 1 | 张三 | 北京 | 1001 | 299.00 1 | 张三 | 北京 | 1002 | 158.50 2 | 李四 | 上海 | 1003 | 420.00 3 | 王五 | 广州 | 1004 | 88.00 4 | 赵六 | 深圳 | NULL | NULL ← 没有订单右边填NULL 5 | 孙七 | 成都 | NULL | NULL ← 没有订单右边填NULL 注意 - 左表users的5行全部出现 - 右表匹配不上的NULL填充 - user_id6的订单右表有但左表没有不出现 */使用场景想保留左表所有数据时用LEFT JOIN。比如查所有用户的下单情况包括从未下单的。变体技巧找左表独有的行-- 找从未下过单的用户LEFT JOIN WHERE IS NULL SELECT u.user_id, u.user_name, u.city FROM users AS u LEFT JOIN orders AS o ON u.user_id o.user_id WHERE o.order_id IS NULL; /* 结果 user_id | user_name | city 4 | 赵六 | 深圳 5 | 孙七 | 成都 */3. RIGHT JOIN右连接——以右表为主左表补充核心逻辑与LEFT JOIN镜像返回右表所有行。实际工作中很少用通常可以改写成LEFT JOIN调换表顺序。-- RIGHT JOIN查询所有订单关联用户信息即使用户信息不存在 SELECT o.order_id, o.user_id, o.amount, u.user_name, u.city FROM users AS u RIGHT JOIN orders AS o ON u.user_id o.user_id ORDER BY o.order_id; /* 执行结果 order_id | user_id | amount | user_name | city 1001 | 1 | 299.00 | 张三 | 北京 1002 | 1 | 158.50 | 张三 | 北京 1003 | 2 | 420.00 | 李四 | 上海 1004 | 3 | 88.00 | 王五 | 广州 1005 | 6 | 350.00 | NULL | NULL ← 用户不存在左边填NULL 注意订单表5行全部出现user_id6的订单没有用户信息NULL填充 */ -- 等价写法RIGHT JOIN 改写为 LEFT JOIN结果相同 SELECT o.order_id, o.user_id, o.amount, u.user_name, u.city FROM orders AS o LEFT JOIN users AS u ON o.user_id u.user_id ORDER BY o.order_id;使用场景查所有订单时关联用户信息脏数据无对应用户的订单也要展示。日常更推荐改写成LEFT JOIN可读性更好。4. FULL OUTER JOIN全外连接——两表合并NULL填充缺失部分核心逻辑返回左表和右表的所有行能匹配的配上不能匹配的两边都填NULL。注意MySQL不直接支持FULL OUTER JOIN需要用UNION模拟。-- FULL OUTER JOINMySQL用UNION模拟 -- 场景数据质量检查找出没有订单的用户和没有用户信息的订单 SELECT u.user_id AS user_id, u.user_name, o.order_id, o.amount, CASE WHEN o.order_id IS NULL THEN 用户无订单 WHEN u.user_id IS NULL THEN 订单无对应用户脏数据 ELSE 正常 END AS data_status FROM users AS u LEFT JOIN orders AS o ON u.user_id o.user_id UNION ALL SELECT u.user_id, u.user_name, o.order_id, o.amount, CASE WHEN o.order_id IS NULL THEN 用户无订单 WHEN u.user_id IS NULL THEN 订单无对应用户脏数据 ELSE 正常 END AS data_status FROM users AS u RIGHT JOIN orders AS o ON u.user_id o.user_id WHERE u.user_id IS NULL -- 只取RIGHT JOIN独有的部分避免重复 ORDER BY data_status, user_id; /* 执行结果 user_id | user_name | order_id | amount | data_status 1 | 张三 | 1001 | 299.00 | 正常 1 | 张三 | 1002 | 158.50 | 正常 2 | 李四 | 1003 | 420.00 | 正常 3 | 王五 | 1004 | 88.00 | 正常 4 | 赵六 | NULL | NULL | 用户无订单 5 | 孙七 | NULL | NULL | 用户无订单 NULL | NULL | 1005 | 350.00 | 订单无对应用户脏数据 */使用场景数据对账、脏数据排查。两张表互相补充不遗漏任何一边。5. CROSS JOIN交叉连接——笛卡尔积全部两两组合核心逻辑左表每行与右表每行两两组合结果行数 左表行数 × 右表行数。-- CROSS JOIN生成所有用户×所有月份的组合日期填充场景 -- 先建一个月份表 WITH months AS ( SELECT 2024-06 AS month UNION ALL SELECT 2024-07 UNION ALL SELECT 2024-08 ) SELECT u.user_id, u.user_name, m.month FROM users AS u CROSS JOIN months AS m WHERE u.user_id IN (1, 2, 3) -- 只取前3个用户做演示 ORDER BY u.user_id, m.month; /* 执行结果3用户 × 3月份 9行 user_id | user_name | month 1 | 张三 | 2024-06 1 | 张三 | 2024-07 1 | 张三 | 2024-08 2 | 李四 | 2024-06 2 | 李四 | 2024-07 2 | 李四 | 2024-08 3 | 王五 | 2024-06 3 | 王五 | 2024-07 3 | 王五 | 2024-08 */最常用场景生成所有用户×所有日期的全量组合再LEFT JOIN实际数据实现0值填充没有数据的位置填0而不是不显示。-- 经典用法每月用户消费统计没有消费的填0 WITH months AS ( SELECT 2024-06 AS month UNION ALL SELECT 2024-07 UNION ALL SELECT 2024-08 ), user_month AS ( SELECT u.user_id, u.user_name, m.month FROM users u CROSS JOIN months m WHERE u.user_id IN (1, 2, 3) ) SELECT um.user_id, um.user_name, um.month, COALESCE(SUM(o.amount), 0) AS total_amount -- NULL替换为0 FROM user_month um LEFT JOIN orders o ON um.user_id o.user_id AND DATE_FORMAT(o.created_at, %Y-%m) um.month GROUP BY um.user_id, um.user_name, um.month ORDER BY um.user_id, um.month;6. SELF JOIN自连接——同一张表连接自身核心逻辑把同一张表当作两张不同的表用别名区分实现行与行之间的比较。-- 场景找出注册日期晚于张三但消费金额更高的用户 -- 思路把users表自连接一个别名代表基准用户另一个代表待比较用户 SELECT u2.user_name AS compared_user, u2.city, u2.register_date, SUM(o2.amount) AS total_spent FROM users AS u1 -- u1基准用户张三 JOIN users AS u2 -- u2待比较用户 ON u2.register_date u1.register_date -- 条件1u2注册晚于u1 JOIN orders AS o1 ON o1.user_id u1.user_id -- u1的订单 JOIN orders AS o2 ON o2.user_id u2.user_id -- u2的订单 WHERE u1.user_name 张三 GROUP BY u2.user_id, u2.user_name, u2.city, u2.register_date HAVING SUM(o2.amount) SUM(o1.amount) -- 条件2u2消费 u1消费 ORDER BY total_spent DESC;更常用的SELF JOIN场景组织架构树员工-上级关系-- 假设有员工表 employees(emp_id, emp_name, manager_id) -- 查询每个员工及其直属上级 SELECT e.emp_name AS employee, m.emp_name AS manager FROM employees AS e LEFT JOIN employees AS m -- 同一张表m代表上级 ON e.manager_id m.emp_id ORDER BY e.emp_id;使用场景层级数据组织架构、分类目录、行与行比较找异常值、排名比较。7. ANTI JOIN反连接——找不在另一表中的数据SQL没有ANTI JOIN关键字用LEFT JOIN WHERE IS NULL或NOT IN / NOT EXISTS实现。-- 方法1LEFT JOIN WHERE IS NULL推荐性能好 -- 场景找出从未消费的用户 SELECT u.user_id, u.user_name, u.city FROM users AS u LEFT JOIN orders AS o ON u.user_id o.user_id WHERE o.order_id IS NULL; /* 结果 user_id | user_name | city 4 | 赵六 | 深圳 5 | 孙七 | 成都 */ -- 方法2NOT EXISTS语义更清晰 SELECT u.user_id, u.user_name, u.city FROM users AS u WHERE NOT EXISTS ( SELECT 1 FROM orders AS o WHERE o.user_id u.user_id ); -- 方法3NOT IN注意右表有NULL时会导致全表返回空慎用 SELECT user_id, user_name, city FROM users WHERE user_id NOT IN ( SELECT DISTINCT user_id FROM orders WHERE user_id IS NOT NULL );使用场景找缺席数据是数据分析中非常高频的需求。四、JOIN性能注意事项JOIN写对了还要写快。3条实用原则① 连接字段必须加索引-- JOIN的ON条件字段两边都应该有索引 CREATE INDEX idx_orders_user_id ON orders(user_id); CREATE INDEX idx_users_user_id ON users(user_id); -- 主键默认有索引 -- 用EXPLAIN查看执行计划确认是否走了索引 EXPLAIN SELECT u.user_name, o.amount FROM users u JOIN orders o ON u.user_id o.user_id; -- 观察 key 列是否显示索引名type 列是否是 ref 而不是 ALL② 先过滤再JOIN-- ❌ 不好先JOIN全表再过滤 SELECT u.user_name, o.amount FROM users u JOIN orders o ON u.user_id o.user_id WHERE u.city 北京 AND o.amount 200; -- ✅ 更好先用子查询/CTE过滤再JOIN减少JOIN的数据量 WITH beijing_users AS ( SELECT user_id, user_name FROM users WHERE city 北京 ), big_orders AS ( SELECT user_id, amount FROM orders WHERE amount 200 ) SELECT b.user_name, bo.amount FROM beijing_users b JOIN big_orders bo ON b.user_id bo.user_id;③ 避免在ON条件里做函数计算-- ❌ 不好函数会导致索引失效 JOIN orders o ON DATE_FORMAT(o.created_at, %Y) 2024 -- ✅ 更好用范围条件 JOIN orders o ON o.created_at 2024-01-01 AND o.created_at 2025-01-01五、7种JOIN一张图总结用表格对比快速记忆JOIN类型 返回数据范围 典型使用场景 ───────────────────────────────────────────────────────────────── INNER JOIN 两表都有匹配的行 主数据分析最常用 LEFT JOIN 左表全部 右表匹配部分 左表为主右表补充 RIGHT JOIN 右表全部 左表匹配部分 右表为主可改写LEFT FULL OUTER JOIN 两表全部MySQL用UNION模拟 数据对账、脏数据检查 CROSS JOIN 两表行的全部组合笛卡尔积 日期/维度填充0值补齐 SELF JOIN 同表自连接行与行比较 层级数据、排名对比 ANTI JOIN 存在于左表但不在右表 找缺席数据、差异比对六、练习题附答案用本文的 users orders 两张表完成以下查询题目1统计每个城市的总消费金额只统计有订单的城市按消费金额降序排列。-- 答案 SELECT u.city, COUNT(DISTINCT o.order_id) AS order_count, SUM(o.amount) AS total_amount FROM users AS u INNER JOIN orders AS o ON u.user_id o.user_id GROUP BY u.city ORDER BY total_amount DESC;题目2找出所有城市的消费情况包括没有产生任何订单的城市金额显示0。-- 答案 SELECT u.city, COUNT(o.order_id) AS order_count, COALESCE(SUM(o.amount), 0) AS total_amount FROM users AS u LEFT JOIN orders AS o ON u.user_id o.user_id GROUP BY u.city ORDER BY total_amount DESC;题目3找出订单表中存在、但在用户表中找不到对应用户的孤儿订单。-- 答案三种写法均可 -- 写法1LEFT JOIN反向 SELECT o.* FROM orders o LEFT JOIN users u ON o.user_id u.user_id WHERE u.user_id IS NULL; -- 写法2NOT EXISTS SELECT * FROM orders o WHERE NOT EXISTS (SELECT 1 FROM users u WHERE u.user_id o.user_id); -- 写法3NOT IN SELECT * FROM orders WHERE user_id NOT IN (SELECT user_id FROM users);总结JOIN的核心不是记住7种名称而是理解一个问题我想保留哪张表的全部数据两边都要 → INNER JOIN左边全要 → LEFT JOIN两边都全要 → FULL OUTER JOINMySQL用UNION想找差集 → LEFT JOIN WHERE IS NULL把这篇收藏写JOIN遇到困惑时翻出来查——比死记硬背7种名字有用多了。有问题评论区见船长会回复。

相关文章:

SQL多表查询完全指南:JOIN的7种用法详解(附完整代码注释)

SQL多表查询完全指南:JOIN的7种用法详解(附完整代码注释)数据分析师写SQL,最容易卡住的地方不是聚合,不是窗口函数——是JOIN。不是不会写,是写了出错,不知道为什么。是知道有7种JOIN&#xff0…...

AI与SEO关键词优化的融合及其应用探索

在探讨AI与SEO关键词优化的融合时,本文将深入分析如何利用人工智能技术提升关键词研究的效率与准确性。首先,AI在分析用户搜索行为和意图方面展现出强大的能力,这使得关键词选择更加精准。其次,通过自然语言处理技术,A…...

Pixel手机工程模式探秘:一键识别Verizon版本与解锁状态

1. Pixel手机Verizon版本的那些事儿 第一次拿到Pixel手机的时候,你可能和我一样兴奋,但很快就会发现一个头疼的问题:这台手机到底是Verizon版本还是非Verizon版本?这个问题可不仅仅是运营商不同那么简单,它直接关系到你…...

保姆级教程:魔百盒CM201-2长虹代工刷机,EMMC/NAND通刷固件实测(附TTL替换命令)

魔百盒CM201-2长虹代工刷机全流程实战指南 第一次接触电视盒子刷机时,那种既兴奋又忐忑的心情我至今记忆犹新。手里这台中国移动的魔百盒CM201-2长虹代工版,原本功能受限,无法自由安装应用,存储空间也捉襟见肘。经过多次实践和踩坑…...

从外网打到内网:手把手教你用MSF+Socks代理穿透CFS三层靶机网络

内网渗透实战:三层网络环境下的代理与横向移动技术解析 在安全攻防演练中,内网渗透能力往往是区分初级与高级安全研究者的关键分水岭。当攻击者突破边界服务器后,如何在内网中横向移动、穿透多层隔离网络,成为实战中最具挑战性的环…...

策略模式的思想的经典案例分析

我们先来假设一个场景:作为杂货店老板,你还需要根据不同季节或促销活动选择不同的定价策略。比如在淡季时,货物打9折销售。大批量采购时,提供85折优惠。实际上,这就是策略模式的思想。// 定义策略接口 interface Prici…...

继Harness之后,“龙虾”JiuwenClaw率先开启 “Coordination Engineering” 时代

从Prompt Engineering、Context Engineering到如今席卷行业的Harness Engineering,AI工程范式的迭代从未停歇。当前单智能体的 “驾驭与治理” 渐成标配,但如何让多个智能体像一支精锐团队一样,自主分工、高效沟通、无缝协作,依然…...

遥感图像小目标检测太头疼?试试用SuperYOLO结合超分,实测VEDAI数据集效果提升明显

遥感图像小目标检测实战:SuperYOLO与超分辨率融合的VEDAI数据集优化方案 当你在处理一片广袤农田的航拍图像时,那些只有几十个像素大小的农机具就像撒在绿色画布上的芝麻粒;或者分析城市街景时,需要从高空视角中定位出单个停车位上…...

Unity开发者别再用ShaderForge了!手把手教你用ASE搞定URP/HDRP材质(附2024最新资源)

Unity开发者进阶指南:用Amplify Shader Editor打造次世代材质效果 当Unity的渲染管线从Built-in转向URP/HDRP时,材质创作工具的选择变得尤为关键。作为ShaderForge的完美替代品,Amplify Shader Editor(ASE)不仅兼容最新…...

如何快速掌握微信防撤回:Mac用户的完整终极指南

如何快速掌握微信防撤回:Mac用户的完整终极指南 【免费下载链接】WeChatIntercept 微信防撤回插件,一键安装,仅MAC可用,支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 你是否曾经在重要的工…...

华北理工大学怎么样?从办学层次、学科特色、科研实力与升学优势详解

华北理工大学是一所省属重点骨干大学,也是河北省“双一流”建设高校。 学校以工、医为主,文、理、经、管、法、艺、教等多学科协调发展,办学层次完整,既有本科教育,也有硕士、博士研究生教育,并具有推荐优秀…...

2026年Hermes Agent/OpenClaw如何安装?阿里云及Coding Plan配置详细解读

2026年Hermes Agent/OpenClaw如何安装?阿里云及Coding Plan配置详细解读。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办…...

如何集成Hermes Agent/OpenClaw?2026年阿里云及Coding Plan配置保姆级攻略

如何集成Hermes Agent/OpenClaw?2026年阿里云及Coding Plan配置保姆级攻略。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人…...

别再为微调大模型发愁了!用LoRA+百川7B,单张消费级显卡也能玩转指令微调

单卡玩转百川7B指令微调:LoRA技术实战指南 当ChatGPT掀起大模型热潮时,许多开发者都面临一个现实困境:如何在有限的硬件资源下实现大语言模型的定制化?本文将揭示一个突破性解决方案——通过LoRA技术对百川7B模型进行高效指令微调…...

2026年怎么搭建Hermes Agent/OpenClaw?阿里云及Coding Plan配置详细步骤

2026年怎么搭建Hermes Agent/OpenClaw?阿里云及Coding Plan配置详细步骤。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办…...

计算机毕业设计:Python股票市场数据采集与可视化系统 Flask框架 数据分析 可视化 大数据 大模型 爬虫(建议收藏)✅

1、项目介绍 技术栈 采用 Python 语言开发,基于 Flask 框架搭建后端服务,通过 requests 爬虫从雪球网采集股票数据,前端使用 Echarts 实现数据可视化。 功能模块股票数据分析可视化股价与成交量分布散点图股票数据股票数据爬取注册…...

每日极客日报 · 2026年04月23日

每日极客日报 2026年04月23日 今日精选 20 条 IT 科技热点,覆盖 AI 大模型、开源工具、工程实践、安全漏洞与业界动态等领域。 🔥 今日头条 Zed 编辑器推出"并行代理"功能,多 Agent 同窗协作成现实 高性能代码编辑器 Zed 今日正…...

计算机毕业设计:Python股市行情可视化与ARIMA预测系统 Flask框架 ARIMA 数据分析 可视化 大数据 大模型(建议收藏)✅

1、项目介绍 技术栈 采用 Python 语言开发,基于 Flask 框架搭建后端服务,Vue 框架构建前端交互界面,通过 IG507 金融数据接口获取实时股票数据,运用 ARIMA 时间序列预测算法进行股价预测,前端使用 Echarts 实现数据可视…...

从平衡到非平衡:电桥技术在温度传感与阻抗测量中的实践解析

1. 电桥技术的前世今生:从平衡到非平衡的进化之路 第一次接触电桥是在大学物理实验课上,当时看着老师用几个电阻和检流计捣鼓几下就能测出未知电阻值,感觉特别神奇。后来在实际工作中才发现,这种诞生于19世纪的技术至今仍在工业测…...

海外党福音:英文论文AI率超标怎么降?从86%到稳过Turnitin的保姆级教程

给英文文章做降ai处理,真的比中文让人头疼很多! 前不久我刚刚写完初稿,给正文部分做了检测后没发现什么问题,当时还以为大功告成,结果到了晚上就被通知学校还要查英文摘要。“不就是再给英文部分做一遍润色嘛”&#…...

中国药科大学赵玉成、徐健/皖西学院韩邦兴ACS Catal|元胡中痕量高效镇痛活性成分左旋紫堇达明生物合成最后缺失步骤的解析(附招聘信息)

遇见/摘要延胡索Corydalis yanhusuo W. T. Wang,又称元胡,属于罂粟科紫堇属植物,是传统常用大宗中药,也是浙江道地药材“浙八味”之一。苄基异喹啉生物碱(BIAs)是延胡索的主要活性成分,如延胡索…...

浏览器指纹反检测技术深度解析——从内核层防护到行为拟真的全链路实现

2026 年,随着各大平台风控体系的持续升级,传统的浏览器指纹伪装技术已难以应对日益精细化的检测手段。平台方不再局限于简单的参数比对,而是通过内核行为分析、机器学习聚类、时序特征检测等多种技术手段,构建了立体式的风控识别网…...

2026指纹浏览器与AI风控对抗技术实践:动态环境适配与行为模拟的完整方案

2026 年,各大互联网平台的风控体系已全面升级为 AI 驱动的智能检测系统,不再依赖单一维度的特征匹配,而是通过多维度数据融合、行为模式分析、环境真实性评估等手段,实现对异常账号的精准识别。指纹浏览器作为多账号运营的核心工具…...

谷歌神经机器翻译GNMT:从技术原理到行业变革

1. 谷歌神经机器翻译系统:一场被低估的技术革命2016年底,当全球媒体都在盘点"史上最糟年份"时,谷歌研究博客发布的一篇技术文章悄然掀起了一场机器翻译领域的静默革命。这篇题为《谷歌多语言神经机器翻译系统的零样本翻译能力》的专…...

告别重复劳动:用Excel VBA+SAP GUI脚本,5分钟搞定批量物料价格查询(CKM3N实战)

告别重复劳动:用Excel VBASAP GUI脚本实现批量物料价格查询自动化 1. 痛点场景与解决方案概述 财务和成本会计人员每月都要面对一项耗时且容易出错的任务:批量查询成百上千个物料的成本价格。传统手动操作SAP CKM3N事务码的方式,每个物料需要…...

用Python脚本自动化AD9364 SPI配置:告别手动写寄存器,快速生成初始化代码

Python自动化AD9364 SPI配置:从寄存器黑盒到工程化工具链 在无线通信系统开发中,AD9364作为一款高性能射频收发器,其灵活配置能力往往伴随着复杂的寄存器操作。传统手动配置方式不仅效率低下,更成为快速迭代开发的瓶颈。本文将揭示…...

手把手教你调试DW9763马达驱动:从寄存器配置到Android上层适配全流程

深度解析DW9763马达驱动调试:从寄存器操作到Android HAL层适配实战 在摄像头模组开发中,自动对焦功能的稳定性和精确度直接影响用户体验。DW9763作为一款广泛应用于移动设备的音圈马达驱动芯片,其调试过程涉及硬件寄存器配置、电源管理、内核…...

Kotaemon快速上手体验:开箱即用的RAG系统搭建全流程

Kotaemon快速上手体验:开箱即用的RAG系统搭建全流程 1. 什么是Kotaemon? Kotaemon是由Cinnamon开发的开源RAG(检索增强生成)系统,专门为文档问答(DocQA)场景设计。它提供了一个直观的用户界面…...

构建高效JetBrains IDE评估重置机制的技术架构实现

构建高效JetBrains IDE评估重置机制的技术架构实现 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在JetBrains IDE开发环境中,ide-eval-resetter项目通过智能评估信息清理技术,为开发者提…...

从《原神》到Matlab:我是如何用TheColor工具箱自制一套67角色配色包的(附源码思路)

从游戏美学到科研绘图:用Matlab构建角色配色系统的全流程解析 当我在浏览《原神》角色立绘时,那些精心设计的色彩组合让我联想到一个有趣的问题:这些视觉艺术家精心调配的色板,能否转化为科研绘图中的实用工具?这个灵感…...