为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.1.1.193
【操作系统】:
【CPU】:
【问题描述】:select a.name, b. from a left join b on a.type = '1' and a.id = b.aid 两个表进行左连接,但是a.type = '1' 的过滤条件没有生效,用inner join 的方式会生效
回答 0
暂无回答
PYZ
--示例createtable A(id number,name varchar2(20),atype varchar2(1));
createtable B(id number,name varchar2(20),btype varchar2(1));
truncatetable A;
truncatetable B;
insertinto A values (1,'AA' ,'1');
insertinto A values (2,'AB' ,'1');
insertinto A values (3,'AC' ,'0');
insertinto A values (4,'AD' ,'1');
insertinto A values (5,'AE' ,'0');
commit;
insertinto B values (1,'BA' ,'1');
insertinto B values (2,'BB' ,'1');
insertinto B values (3,'BC' ,'1');
insertinto B values (5,'BD' ,'0');
insertinto B values (6,'BE' ,'1');
commit;
--左外关联是获取左表全部结果集,以on中的条件为限制,满足条件返回结果,不满足条件右表返回值填充为nullselect a.name, b.name from a leftjoin b on a.atype ='1'and a.id = b.id ;
行号 NAME NAME
---------- ---- ----1 AA BA
2 AB BB
3 AE NULL4 AD NULL5 AC NULL--内连接只取满足条件的结果集相交部分select a.name, b.name from a innerjoin b on a.atype ='1'and a.id = b.id ;
行号 NAME NAME
---------- ---- ----1 AA BA
2 AB BB
--如果把过滤条件放在where部分,并不算完全的左外连接,左表满足where条件的会获取,右表不满足条件的会填充为nullselect a.name, b.name from a leftjoin b on a.id = b.id where a.atype ='1';
行号 NAME NAME
---------- ---- ----1 AA BA
2 AB BB
3 AD NULL
--示例 create table A(id number,name varchar2(20),atype varchar2(1)); create table B(id number,name varchar2(20),btype varchar2(1)); truncate table A; truncate table B; insert into A values (1,'AA' ,'1'); insert into A values (2,'AB' ,'1'); insert into A values (3,'AC' ,'0'); insert into A values (4,'AD' ,'1'); insert into A values (5,'AE' ,'0'); commit; insert into B values (1,'BA' ,'1'); insert into B values (2,'BB' ,'1'); insert into B values (3,'BC' ,'1'); insert into B values (5,'BD' ,'0'); insert into B values (6,'BE' ,'1'); commit; --左外关联是获取左表全部结果集,以on中的条件为限制,满足条件返回结果,不满足条件右表返回值填充为null select a.name, b.name from a left join b on a.atype = '1' and a.id = b.id ; 行号 NAME NAME ---------- ---- ---- 1 AA BA 2 AB BB 3 AE NULL 4 AD NULL 5 AC NULL --内连接只取满足条件的结果集相交部分 select a.name, b.name from a inner join b on a.atype = '1' and a.id = b.id ; 行号 NAME NAME ---------- ---- ---- 1 AA BA 2 AB BB --如果把过滤条件放在where部分,并不算完全的左外连接,左表满足where条件的会获取,右表不满足条件的会填充为null select a.name, b.name from a left join b on a.id = b.id where a.atype = '1'; 行号 NAME NAME ---------- ---- ---- 1 AA BA 2 AB BB 3 AD NULL