查询中的MySQL if-else语句
我有一个内部查询,它选择所有链接到giver用户的附属机构查询中的MySQL if-else语句,mysql,sql,Mysql,Sql,我有一个内部查询,它选择所有链接到giver用户的附属机构 (SELECT `realtor_user_id` FROM `affiliate_assignments` WHERE `lender_user_id` = `users`.`id`) 附属机构分配结构为: id |房地产经纪人|用户|贷款人|用户| id 其中,users表在外部查询中加入,realtor\u user\u id和lender\u user\u id都是users.id的外键 我还有用户的
(SELECT
`realtor_user_id`
FROM
`affiliate_assignments`
WHERE
`lender_user_id` = `users`.`id`)
附属机构分配
结构为:
id |房地产经纪人|用户|贷款人|用户| id
其中,users
表在外部查询中加入,realtor\u user\u id
和lender\u user\u id
都是users.id的外键
我还有用户的角色
(在外部查询中选择),可以是房地产经纪人
或贷款人
我需要的是:
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条件吗?你可以使用复合条件is when子句重新构建你的条件
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';
用例代替IF。这绝对不是一个重复的问题,只是说答案是case
。阅读问题。它涉及多个不同的列和相关性。where子句中不需要一个案例?OP的伪代码在第一个选择中有where lender\u user\u id=users.id
,在第二个选择中有where realtor\u user\u id=users.id
。是的,where子句呢?