惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
月光博客
月光博客
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
IT之家
IT之家
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
爱范儿
爱范儿

博客园 - AlfredZhao

Git 提交代码:从报错到 SSH 免密推送 GitHub 克隆他人私有仓库:从授权到下载 理解Oracle Property Graph:以账户转账示例完成图特性最小测试 APEX 无法分配 SH 用户?一个存储过程轻松解决 SH 中文化样例数据使用手册 Oracle 排除非业务表:一份能直接抄的“全量过滤”SQL 进程都杀了,为什么 `netstat` 还能看到端口? MAC 空间告急?Codex 的 156GB 缓存垃圾,这样清! 人工清理问题数据:先查准,再删除 TK(Trusted Knowledge)为何而生? 使用快捷键快速切换 Mac 外接显示器模式 客户环境 Nginx 配置:流式报表与超时排查要点 Security Central:数据库安全的统一控制与运营平台 Palantir 眼中的一次“订单可能延期”,如何成为实时决策的起点? 从一条订单消息到 Bronze、Silver、Gold:我的第一次 Kafka + Lakehouse 实验 UUID v4 与 v7:同样是唯一 ID,为什么数据库表现可能完全不同? 用 crontab 给 LLM 使用量装上“监控眼” DeepSeek 与 GPT API 价格调整:该关注什么? 查看 Oracle 数据库中的定时任务执行情况 Codex 专用用户登录后自动进入默认项目目录 Mac 小技巧:用方向键优雅处理超长网址 Oracle GDD 与 Raft:别把共识机制和数据主权混为一谈 在 Oracle APEX 中用 BGE_BASE 生成向量:从模型导入到历史数据更新 行业人+AI:真正有价值的四个关键要素 知识库文件解析失败:一次由 Domain Index 引发的定位记录 Unicode 码位数、UTF-8 字节数、中英文差异和 Oracle 长度别再混淆了 Skill 的使用:从路径到能力边界 切换 Embedding 模型时,千万别忽略历史向量维度 kbot 适配 GPT-5.6:一次参数兼容性排查 Git 打 Tag 上传 GitHub 遇到 SSH 超时,如何处理?
SQL JOIN 写法:把多表关联条件写清楚
AlfredZhao · 2026-08-16 · via 博客园 - AlfredZhao

2026-08-16 07:26  AlfredZhao  阅读(0)  评论()    收藏  举报

多表查询时,笔者习惯把关联关系放在 JOIN ... ON ... 中,把筛选条件放在 WHERE 中。这样阅读 SQL 时,表与表如何关联、最终筛选什么数据会更直观。

01 | 基础查询字段

SELECT u.username,
 ai.ai_score,
 ai.ai_remark,
 TO_CHAR(ai.update_time, 'YYYY-MM-DD HH24:MI:SS') AS update_time

这里从用户表获取用户名,从 AI 内容表获取分数、备注和更新时间。TO_CHAR 将时间格式化为便于展示的字符串。

02 | 使用 JOIN 关联用户表

FROM t_ai_content ai
JOIN tk_users u
 ON u.user_id = ai.user_id

t_ai_content 使用别名 aitk_users 使用别名 u。两张表通过 user_id 关联,因此可以在结果中同时查询用户名和 AI 内容信息。

03 | 多字段关联历史表

JOIN t_history t
 ON t.user_id = ai.user_id
 AND t.type = ai.type
 AND t.week = ai.week
 AND t.day = ai.day
 AND t.learn_level = ai.learn_level

关联 t_history 时,不能只看用户 ID,还要同时匹配类型、周、天和学习等级。多个条件都写在 ON 后,明确表示这些字段共同决定两条记录是否对应。

04 | 用 WHERE 做时间筛选

WHERE update_time > sysdate - 1/24/4

该条件筛选最近一段时间更新的数据。完整 SQL 如下:

SELECT u.username,
 ai.ai_score,
 ai.ai_remark,
 TO_CHAR(ai.update_time, 'YYYY-MM-DD HH24:MI:SS') AS update_time
FROM t_ai_content ai
JOIN tk_users u
 ON u.user_id = ai.user_id
JOIN t_history t
 ON t.user_id = ai.user_id
 AND t.type = ai.type
 AND t.week = ai.week
 AND t.day = ai.day
 AND t.learn_level = ai.learn_level
where update_time > sysdate - 1/24/4

关注我,和AI一起成长~