- 论坛徽章:
- 7
|
最近刚开始接触postgresql,在left join和right join上卡了壳. 特此求教,
例如,我现在有两个表 A , B
create temp table A( a int, v int);
create temp table B( a int, v int);
然后两个表的数据分别为--
mcdb=# select * from A;
a | v
----+---
1 | 1
2 | 2
3 | 3
4 | 4
mcdb=# select * from B;
a | v
---+----
1 | 11
2 | 12
5 | 15
6 | 16
(4 rows)
想通过判断a的值来形成一个合并表 -- 即通过a,分别把A和B中对应的v值查询出来,如果一个表没有v,那么就留空.希望查询下结果为 --
mcdb=# select * from B;
a | v_A | v_B
---+----
1 | 1 | 11
2 | 2 | 12
3 | 3 |
4 | 4 |
5 | | 15
6 | | 16
可我写成
mcdb=# select case when A.a=null then B.a else A.a end as a, a.v as v_A, b.v as v_B from A
right join B on A.a=B.a;
a | v_a | v_b
---+-----+-----
1 | 1 | 11
2 | 2 | 12
| | 15
| | 16
这里没能发现 A.a=null的A表row,请问这是怎么回事? 难道如果联接字段值不存在的话,返回的不是null吗?
请指教,谢谢
|
|