我有一个连接多个表的查询。例如。
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)
用户资格可能有也可能没有用户的行。如果它不必从默认表中获取它。
答案 0 :(得分:1)
join
替换您的where
条件
最后的left join
是您想要找到哪个用户在user_eligiblity
中匹配的人{* 3}}
COALESCE将返回ue.eligible if <> null
或de.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'