SQL查询问题

两张表A,B

A中字段:p_name,in_time

B中字段:p_name,over_time

------------------------------------------------------------- 

假设A中记录为:张三 , 10

假设B中记录为:张三 , 100

执行: select   a.p_name ,   in_time ,   over_time   from   A a ,   B b   where   a.p_name  =  b.p_name;

得到: p_name    in_time    over_time

                张三        10           100

-------------------------------------------------------------- 

当A中无记录,B中记录为:张三 , 100

怎么能得到下面的结果:

         p_name     in_time      over_time

            张三            0                 100

 

当B中无记录,A中记录为:张三 , 10

怎么能得到下面的结果:

         p_name     in_time      over_time

            张三           10                  0

 

这种情况下按上面的语句,啥也得不到。

 

各位大侠,谁能帮忙看看怎么才能在下面两种情况下

能实现无记录的一方为0呀,谢谢了!

上面的两种情况mysql 分别可以这样:

select a.p_name , in_time ,
case when over_time is null then 0 else over_time end
from A left join B on a.p_name = b.p_name;

select b.p_name ,
case when in_time is null then 0 else in_time end,
over_time

from B left join A on a.p_name = b.p_name;

最后你需要的mysql可以这样:

select p_name,in_time,0 from a where a.p_name not in (select a.p_name from a,b where a.p_name = b.p_name) union

select p_name,0,over_time from b where b.p_name not in (select a.p_name from a,b where a.p_name = b.p_name) union

select a.p_name,in_time,over_time from a,b where a.p_name = b.p_name

SELECT CASE
WHEN N1 IS NULL THEN
N2
ELSE
N1
END P_NAME,
NVL(IN_TIME,0) IN_TIME,
NVL(OVER_TIME,0) OVER_TIME
FROM (SELECT A.p_name N1, B.p_name N2, A.in_time, B.over_time
FROM B
full JOIN A ON A.p_name = B.p_name);
oracle的写法不知道mysql可用不,优化表结构比较好

db2的可以更简洁点:
select a.p_name , coalesce(in_time,0) , coalesce(over_time,0)
from A full join B on a.p_name = b.p_name;
这个语句可以实现你说的以上两种情况