“左连接多表”通常指的是 使用 LEFT JOIN 把多张表按顺序连接起来,以左表为主表,保留左表中所有记录,即使右表没有匹配数据。
下面以 SQL(以 MySQL / PostgreSQL 为例) 来说明。
SELECT 字段列表
FROM 表A
LEFT JOIN 表B ON 表A.关联字段 = 表B.关联字段
LEFT JOIN 表C ON 表A.关联字段 = 表C.关联字段
LEFT JOIN 表D ON 表B.关联字段 = 表D.关联字段;
✅ 关键点:
LEFT JOINON 后面写连接条件users(用户)orders(订单)payments(支付)查询所有用户,以及他们的订单和支付信息(没有也要显示)
SELECT
u.id,
u.name,
o.order_no,
p.pay_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
LEFT JOIN payments p ON o.id = p.order_id;
✅ 结果特点:
order_no 为 NULLpay_amount 为 NULL-- 错误示例(容易笛卡尔积)
LEFT JOIN orders o
LEFT JOIN payments p
✅ 正确:
LEFT JOIN orders o ON u.id = o.user_id
LEFT JOIN payments p ON o.id = p.order_id
❌ 错误(会把左连接变成内连接效果):
WHERE p.pay_status = 1
✅ 正确(放在 ON 里):
LEFT JOIN payments p
ON o.id = p.order_id
AND p.pay_status = 1
A
LEFT JOIN B
LEFT JOIN C
和
A
LEFT JOIN C
LEFT JOIN B
结果可能不同(尤其是 C 依赖 B 时)
SELECT
u.id,
u.name,
COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;
可以告诉我:
我可以直接帮你写 可运行的 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。