2016-11-24 184 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';