SQL左连接结果咨询:给定表A左连表B的输出是否正确?
结论
你得到的结果是否正确,取决于执行LEFT JOIN时的具体逻辑:
- 如果你用的是最常规的等值LEFT JOIN、没有额外的去重/分组逻辑,这个结果是错的。
表A3行全为1、表B2行全为1,关联条件设为两表列值相等时,表A的每一行都会匹配到表B的2行数据,最终会返回3*2=6行结果,每行值均为1,和你拿到的3行结果不符。
对应SQL示例:SELECT A.column_name FROM A LEFT JOIN B ON A.column_name = B.column_name; - 如果你用的是左半连接(
LEFT SEMI JOIN),或者JOIN后加了去重、按A表行唯一标识分组的逻辑,这个结果是对的。
这类逻辑只会返回表A中能匹配到表B的行,不会因为B表有多条匹配项就生成重复行,表A的3行都能匹配到表B的内容,最终就会返回3行值为1的结果。
对应SQL示例:-- 左半连接写法 SELECT A.column_name FROM A LEFT SEMI JOIN B ON A.column_name = B.column_name; -- 等价EXISTS子查询写法 SELECT A.column_name FROM A WHERE EXISTS (SELECT 1 FROM B WHERE B.column_name = A.column_name);
内容的提问来源于stack exchange,提问作者Joe V
相关产品推荐
相关产品推荐

