mysql:希望case查询返回null或如果找不到匹配则为空

时间:2012-09-12 17:20:20

标签: mysql

Expertz plz plz HELP :(

我有一张关系表

r_id    usera   userb   active
13       5         1      0
16       1         2      0

现在我想检查一些其他用户是否是id为1的朋友并给我其他ID除了1

与此查询类似,我希望ans为空,因为不满足条件active = 1

如果条件返回true,则表示结果为5,2

所以我形成了这个查询

注意:user_id会根据会话继续更改

$user_id = 1
SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE `usera`=$user_id 
    OR `userb`=$user_id and `active`='1'

现在问题是即使条件不满足(即active = 1)它仍然给我userb 我希望查询返回为空或null

谢谢,

2 个答案:

答案 0 :(得分:0)

你遗漏了一些括号:

SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE `usera`=$user_id 
    OR (`userb`=$user_id and `active`='1')

甚至可能是您正在寻找的东西:

SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE (`usera`=$user_id OR `userb`=$user_id) 
  and `active`='1'

答案 1 :(得分:0)

你的括号错了:

$user_id = 1
SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE (`usera`=$user_id  OR `userb`=$user_id) and `active`='1'

您似乎只关心活跃用户,但您只是将条件放在条件表达式的第二部分上。