应该是这样的,一问里的''在oracle里被认为是null,and table_b.cx = ''这个条件是在左连的基础上再限定,由于null与任何值都不等,所以最后结果为空。 二问。因为左连得结果是1 a 1 b和1 a 1 c,再加上限定条件and table_b.cx =‘1’,结果还是1 a 1 b和1 a 1 c。
1:你说的这种情况不太可能出现,你再查查 2: select * from table_a left join table_b on table_a.id = table_b.id and table_b.cx = '1' 加了and table_b.cx = '1' ,先过滤B表达条件,得到2条记录,A表左关联,当然得到2条记录
SQL> select * from table_a;
ID C1 --------------------- ---------- 1 a
SQL> select * from table_b;
ID CX --------------------- ----------
SQL> SQL> select 2 * 3 from table_a 4 left join table_b on 5 table_a.id = table_b.id 6 ;
ID C1 ID CX --------------------- ---------- --------------------- ---------- 1 a
SQL> SQL> select 2 * 3 from table_a 4 left join table_b on 5 table_a.id = table_b.id 6 and table_b.cx = '' 7 ;
ID C1 ID CX --------------------- ---------- --------------------- ----------
SQL>
SQL> select * from table_a;
ID C1 --------------------- ---------- 1 a
SQL> select * from table_b;
ID CX --------------------- ---------- 1 b 1 c
SQL> SQL> select 2 * 3 from table_a 4 left join table_b on 5 table_a.id = table_b.id 6 ;
ID C1 ID CX --------------------- ---------- --------------------- ---------- 1 a 1 b 1 a 1 c
SQL> SQL> select 2 * 3 from table_a 4 left join table_b on 5 table_a.id = table_b.id 6 and table_b.cx = '1' 7 ;
ID C1 ID CX --------------------- ---------- --------------------- ---------- 1 a
你用的是left join,就是说以右边的表为基础,左边没有就补null。
你用right join看看
二问。因为左连得结果是1 a 1 b和1 a 1 c,再加上限定条件and table_b.cx =‘1’,结果还是1 a 1 b和1 a 1 c。
select
*
from table_a
left join table_b on
table_a.id = table_b.id
and table_b.cx = '1'
加了and table_b.cx = '1' ,先过滤B表达条件,得到2条记录,A表左关联,当然得到2条记录
ID C1
--------------------- ----------
1 a
SQL> select * from table_b;
ID CX
--------------------- ----------
SQL>
SQL> select
2 *
3 from table_a
4 left join table_b on
5 table_a.id = table_b.id
6 ;
ID C1 ID CX
--------------------- ---------- --------------------- ----------
1 a
SQL>
SQL> select
2 *
3 from table_a
4 left join table_b on
5 table_a.id = table_b.id
6 and table_b.cx = ''
7 ;
ID C1 ID CX
--------------------- ---------- --------------------- ----------
SQL>
ID C1
--------------------- ----------
1 a
SQL> select * from table_b;
ID CX
--------------------- ----------
1 b
1 c
SQL>
SQL> select
2 *
3 from table_a
4 left join table_b on
5 table_a.id = table_b.id
6 ;
ID C1 ID CX
--------------------- ---------- --------------------- ----------
1 a 1 b
1 a 1 c
SQL>
SQL> select
2 *
3 from table_a
4 left join table_b on
5 table_a.id = table_b.id
6 and table_b.cx = '1'
7 ;
ID C1 ID CX
--------------------- ---------- --------------------- ----------
1 a
SQL>
你说的我也略有所闻,但反过来用right join,再用我的条件,结果也是一样的.请你再去试试看.
这个说法好像也不正确啊.我主要要是的主表的内容,幅表,再怎么加条件也好,主表要出来记录.
还有后面的问.加上and table_b.cx =‘1’是随意的.只是不明的是,怎么出来两条记录.也所学的东西,有点不一致
这个回答,好像正确.但1问中,我并没有用where,所以还是左连接的条件,并没有你说的是关联后过滤.
2问中,也是同样.
可能正如你说的那样.但回答太抽象了.能不能给小妹妹.具体点?
table_b.cx = ''
table_b.cx is null;2..是先过滤b表
然后a表和b表关联