2016-11-24 185 views
-1

我有这个内部查询,选择链接到给予者用户的所有分支机构。MySQL如果其他语句内查询

(SELECT 
    `realtor_user_id` 
FROM 
    `affiliate_assignments` 
WHERE 
`lender_user_id` = `users`.`id`) 

affiliate_assignments结构是:

id | realtor_user_id | lender_user_id

其中users表在外部查询接合并且两个realtor_user_idlender_user_idusers.id

外键我也有用户的role(在选定的外部查询),可以是realtorlender

我需要的是:

IF role = 'lender' 

SELECT realtor_user_id 
FROM affiliate_assignments 
WHERE lender_user_id = users.id 

ELSE IF role = 'realtor' 

SELECT lender_user_id 
FROM affiliate_assignments 
WHERE realtor_user_id = users.id 

END IF 

如何才能做到这一点?

+1

使用CASE代替IF。 https://dev.mysql.com/doc/refman/5.7/en/case.html –

+0

这绝对不是一个问题的重复,只是说答案是'case'。阅读问题。 。 。它涉及多个不同的列和关联。 –

回答

2

可以使用的情况下,当

select case when role = 'lender' then realtor_user_id 
       when role = 'realtor' then lender_user_id 
      end as my_result 
    FROM affiliate_assignments 
    WHERE lender_user_id = users.id 

你有不同的事实where条件可以rebuil您若继续使用复合条件为:第

select case 
      when role = 'lender' AND lender_user_id = users.id then realtor_user_id 
      when role = 'realtor' AND realtor_user_id = users.id then lender_user_id 
        ELSE your_result_for else 
FROM affiliate_assignments 
+0

不需要where子句中的情况? – jarlh

+0

@jarlh。请在你的评论中更好地解释这个问题。 – scaisEdge

+0

OP的伪代码在第一个选择中有'WHERE lender_user_id = users.id',第二个中有WHERE realtor_user_id = users.id'。 – jarlh

0

使用case语句:

SELECT CASE 
    WHEN role = 'lender' THEN realtor_user_id 
    WHEN role = 'realtor' THEN lender_user_id 
    END CASE 
FROM affiliate_assignments 
WHERE realtor_user_id = users.id 
0

解决此问题的方法之一left join s:

select u.*, 
     coalesce(aal.realtor_user_id, aar.lender_user_id) as other_user_id 
from users u left join 
    affiliate_assignments aal 
    on u.id = aal.lender_user_id and u.role = 'lender' left join 
    affiliate_assignments aar 
    on u.id = aar.realtor_user_id and u.role = 'realtor';