Mysql CASE多次返回NULL

时间:2015-08-20 19:43:10

标签: mysql

我正在寻找一个获得用户朋友的案例。有一个系统,其中is_confirmed = 1表示朋友,is_confirmed = 0表示仍处于未决状态,但发送请求。我需要得到所有is_confirmed = 1的朋友。如果没有朋友或者如果大小写为0并且有待处理的请求,则查询返回NULL。它返回多个NULLS。

SELECT CASE WHEN friend_user_id =  '935'
                AND is_confirmed =  '1'
            THEN initiator_user_id
            WHEN initiator_user_id =  '935'
                AND is_confirmed =  '1'
            THEN friend_user_id
            ELSE NULL 
    END AS friend_id
FROM wp_bp_friends
LIMIT 0 , 30

也是使用CASE最好的方法吗?

SQL FIDDLE here

2 个答案:

答案 0 :(得分:1)

我认为CASE不是最好的方法。另一种方式可以是:

(
    /* 1) */
    SELECT wp_bp_friends.initiator_user_id AS FriendId
        FROM wp_bp_friends
        WHERE
            wp_bp_friends.friend_user_id = 935
            AND wp_bp_friends.is_confirmed = '1'
)
UNION
(
    /* 2) */
    SELECT wp_bp_friends.friend_user_id AS FriendId
        FROM wp_bp_friends 
        WHERE
            wp_bp_friends.initiator_user_id = 935
            AND wp_bp_friends.is_confirmed = '1'
)

它将连接左侧的Id 1)确认的935名朋友是发起人 2)用户935作为发起人的已确认的935朋友

答案 1 :(得分:0)

使用两个查询:

  • SELECT friend_user_id FROM wp_bp_friends
    WHERE initiator_user_id='935' AND is_confirmed='1'
    
  • SELECT initiator_user_id FROM wp_bp_friends
    WHERE friend_user_id='935' AND is_confirmed='1'
    

或者将它们组合成一个:

(
    SELECT friend_user_id FROM wp_bp_friends
    WHERE initiator_user_id='935' AND is_confirmed='1'
) UNION ALL (
    SELECT initiator_user_id FROM wp_bp_friends
    WHERE friend_user_id='935' AND is_confirmed='1'
)