MySQL如果其他语句内查询
问题描述:
我有这个内部查询,选择链接到给予者用户的所有分支机构。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_id
和lender_user_id
是users.id
外键我也有用户的role
(在选定的外部查询),可以是realtor
或lender
我需要的是:
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
如何才能做到这一点?
答
可以使用的情况下,当
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
答
使用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
答
解决此问题的方法之一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';
使用CASE代替IF。 https://dev.mysql.com/doc/refman/5.7/en/case.html –
这绝对不是一个问题的重复,只是说答案是'case'。阅读问题。 。 。它涉及多个不同的列和关联。 –