示例
示例
SELECT u.id, u.name,
(SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_cnt
FROM users u
WHERE u.status = 1;| 形式 | 子查询引用外层列(这里 u.id) |
|---|---|
| 性能 | 内表连接键上有索引是前提 |
| 改写 | 可转 LEFT JOIN + GROUP BY 或窗口函数 |
子查询引用外层查询的列,逻辑上逐行求值;配合内表索引可高效,否则每行一次扫描。
SELECT u.id, u.name,
(SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_cnt
FROM users u
WHERE u.status = 1;| 形式 | 子查询引用外层列(这里 u.id) |
|---|---|
| 性能 | 内表连接键上有索引是前提 |
| 改写 | 可转 LEFT JOIN + GROUP BY 或窗口函数 |