如何根据可用性查询两个表中的一个表中的数据

时间:2015-10-23 17:43:37

标签: mysql sql oracle

我有一个连接多个表的查询。例如。

Select u.username,r.role,s.salary
from user u, roles r, salary s
where u.userid = s.userid
and r.roleid = u.roleid.

现在我需要附加条件才能在资格标志为真时获取数据,这可以存在于两个表中(默认资格和用户资格)。如果数据在user_eligiblity中,我需要从user_eligility进行检查,否则我需要从默认资格中获取。

Select u.username,r.role,s.salary
from user u, roles r, salary s, default_eligility de, user_eligiblity ue
where u.userid = s.userid
and r.roleid = u.roleid
and (if ue has data check if ue.eligible=y and ue.userid = u.userid 
     else get data from de.eligibity='y' and de.roleid = u.roleid)

用户资格可能有也可能没有用户的行。如果它不必从默认表中获取它。

1 个答案:

答案 0 :(得分:1)

join替换您的where条件

最后的left join是您想要找到哪个用户在user_eligiblity中匹配的人{* 3}}

COALESCE将返回ue.eligible if <> nullde.eligible否则

Select u.username, r.role, s.salary
from user u 
join roles r 
  on u.roleid = r.roleid
join salary s
  on u.userid = s.userid
join default_eligility de
  on u.roleid = de.roleid 
left join user_eligiblity ue
  on u.userid = ue.userid
WHERE
     COALESCE(ue.eligible, de.eligible) = 'y'