Mysql案例多次返回NULL

Mysql案例多次返回NULL,mysql,Mysql,我正在做一个案例,以获得用户的朋友。有一个系统,其中is_confirm=1表示朋友,is_confirm=0表示仍挂起,但请求已发送。我需要得到所有确认为1的朋友。如果没有朋友,或者如果案例为0且存在挂起的请求,则查询将按照我的要求返回NULL。它返回多个空值 SELECT CASE WHEN friend_user_id = '935' AND is_confirmed = '1' THEN initiator_user_id

我正在做一个案例,以获得用户的朋友。有一个系统,其中is_confirm=1表示朋友,is_confirm=0表示仍挂起,但请求已发送。我需要得到所有确认为1的朋友。如果没有朋友,或者如果案例为0且存在挂起的请求,则查询将按照我的要求返回NULL。它返回多个空值

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

我认为案例并不是最好的方法。另一种方法可以是:

(
    /* 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的确认好友使用两个查询:

或者将它们合并为一个:

(
    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'
)

1的文本是否真的需要勾号,或者你能去掉它们吗?我认为样本数据、期望的结果和实际的结果将真正有助于传达你的问题。当然,SQLFiddle是一个非常有用的资源。我将制作一个SQLFIDLE:)1或0只是我使用的数字,1表示已确认,0表示待处理。我的理解是,为什么它不应该返回多个
NULL
s?由于没有
WHERE
子句,因此它会为表中的每一行返回一行结果。由于大多数行在条件下既不匹配也不匹配,因此将有大量空值。
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'
)