SQL中(+)的含义解析:带(+)的字段等于常量的疑问
Oracle (+)外连接中
t2.c3(+) = 'some_string'的含义 你看到的是Oracle专属的老式外连接语法,先拆解整个语句:
t1.b1 = t2.b2(+)表示左外连接:保留t1的所有行,匹配t2中b2等于t1.b1的行;如果t1的某行在t2里找不到匹配,t2的所有列会显示NULL。
而第四行的t2.c3(+) = 'some_string',核心是把这个过滤条件绑定到右表t2的匹配规则里,具体效果等价于ANSI SQL的左外连接ON子句里的条件:
SELECT t1.a1, t2.a2 FROM t1 LEFT JOIN t2 ON t1.b1 = t2.b2 AND t2.c3 = 'some_string'
简单说就是:
- 匹配
t2行时,必须同时满足两个条件:t2.b2 = t1.b1且t2.c3 = 'some_string' - 如果
t1的某行在t2里找不到同时满足这两个条件的行,依然保留t1的该行,t2的列显示NULL
如果去掉(+)写成t2.c3 = 'some_string',效果就完全不同了:这会变成左外连接完成后,再过滤掉t2.c3不等于'some_string'的行(包括t2为NULL的行),相当于把左外连接变成了内连接。
这种老式的(+)语法现在已经不推荐使用,ANSI标准的LEFT JOIN写法逻辑更清晰,可读性更强。
内容的提问来源于stack exchange,提问作者user18335335
相关产品推荐
相关产品推荐

