SELECT
'IsActive' =
FROM Users u
INNER JOIN Permissions p ON u.Id = p.UserId
我需要在上面的查询中添加一些逻辑来获得与我在下面做的相同的结果(这是伪代码)。
这是否可以使用案例陈述?
if(
(p.Approved &&
(p.secondaryApproval == null || (p.SecondaryApproval != null && p.secondaryApproval)
)
)
上面if
语句中的逻辑确定为IsActive
应为真。
我可以在查询中以某种方式使用sql case语句来mimick
这个逻辑吗?
答案 0 :(得分:3)
像这样:
SELECT
CASE
WHEN p.Approved=1 AND (p.SecondaryApproval IS NULL OR p.SecondaryApproval=1) THEN 1
ELSE 0
END AS IsActive
FROM Users u
INNER JOIN Permissions p ON u.Id = p.UserId
请注意,没有必要在p.SecondaryApproval
的另一端测试OR
非空值,无论是在SQL还是在C#代码中。
答案 1 :(得分:0)
试试这个,
SELECT * FROM Users u
INNER JOIN Permissions p ON u.Id = p.UserId
Where p.Approved = true
and (
p.secondaryApproval is null
OR
(p.SecondaryApproval is not null and p.secondaryApproval = true)
)