2014-11-20 148 views
0

我有两张表,一张在employee_table中有员工信息 ,另一个是电话号码。这些员工。现在,phone_table可以为具有不同类型的特定员工设置多个条目,如W1 - >工作,M - >移动,H1 - >家庭。 现在我想要查询,如果W1被发现,那么就不应该提取其他电话类型。如果不是W1,那么应该检查M并且查询应该取得手机号码(等等等等),所以基本上我必须在select语句中使用if和else。按照要求我无法为此写一个函数。if和else在sql中的select查询

我尝试使用案例和喜欢的时候如下: -

select emp_num, emp_name,ph_no,ph_type, 
case 
    when ph_type='W1' 
then ph_no 
    when ph_type='M' 
then ph_no 

from people_table pt ,phone_table ppt 
where pt.person_id=ppt.person_id 

但这也返回相同的输出。也就是说,如果员工有w1没有。和M no。它会返回两个..但它应该取W1无。仅过M

回答

4

这听起来像你需要加入到过滤设置手机表的两倍:

select 
    emp_num, 
    emp_name, 
    ph_no, 
    COALESCE(ppt_w.ph_type,ppt_m.ph_type) ph_type, 
    COALESCE(ppt_w.ph_no,ppt_m.ph_no) ph_no 
from people_table pt 
LEFT JOIN phone_table ppt_w 
    ON pt.person_id=ppt_w.person_id 
    AND ppt_w.ph_type='W1' 
LEFT JOIN phone_table ppt_m 
    ON pt.person_id=ppt_m.person_id 
    AND ppt_m.ph_type='M' 
1

你可以做左联接拿到电话号码,并​​3210拿到的第一个电话存在的编号:

select 
    p.emp_num, 
    p.emp_name, 
    coalesce(w1.ph_no, m.ph_no, h1.ph_no) as ph_no, 
    coalesce(w1.ph_type, m.ph_type, h1.ph_type) as ph_type 
from 
    people_table p 
    left join phone_table w1 on w1.person_id = p.person_id and w1.ph_type = '' 
    left join phone_table m on m.person_id = p.person_id and m.ph_type = '' 
    left join phone_table h1 on h1.person_id = p.person_id and h1.ph_type = ''