SQL查询链接两个表返回错误

时间:2015-02-17 19:37:35

标签: mysql

我有两张表如下

用户[ID,用户名]

relationship [user1_id(FK),user2_id(FK),status]

我正在尝试使用usernameuser1_id来自user2_id status = 1来获取relationshipuser1_iduser2_id都是ID表中的user个。以下查询失败,我不确定它在哪里出错。

SELECT
  U.username,
  (R.first_user_id, R.second_user_id AS friends)
FROM
  user U,
  `relationship` R
WHERE (R.`first_user_id` = {$userID} OR R.`second_user_id`)
  AND (`status` = 1 AND U.ID = friends)

3 个答案:

答案 0 :(得分:1)

返回状态为1的关系中的两个用户名。 这也假定如果存在关系记录,则两个用户都必须在用户表中。

SELECT U1.UserName, U2.username
FROM Relationship R
INNER JOIN USER U1
 on R.User1_ID = U1.user_ID
INNER JOIN USER U2
 and R.User2_ID = U2.user_ID
WHERE R.Status=1

答案 1 :(得分:0)

看起来您可能正在尝试获取与某个指定用户有关系的所有用户的用户名,而不管关系记录中用户ID的顺序如何。可能是这样的:

SELECT
  U.username,
  U.first_user_id,
FROM
  user U
  JOIN `relationship` R
    ON R.first_user_id = U.ID
WHERE
  (R.`second_user_id` = {$userID})
    AND (`status` = 1)

UNION ALL

SELECT
  U.username,
  U.second_user_id,
FROM
  user U
  JOIN `relationship` R
    ON R.second_user_id = U.ID
WHERE
  (R.`first_user_id` = {$userID})
    AND (`status` = 1)

如果这会产生重复(或可能),并且您不希望这样做,请将UNION ALL更改为直线UNION

答案 2 :(得分:0)

我基于xQbert回答成功了:

                  SELECT 
                        U1.username, 
                        U2.username
                    AS user_friend
                    FROM 
                        Relationship R
                    INNER JOIN 
                        user U1
                     ON 
                        R.first_user_id = U1.ID
                    INNER JOIN 
                        user U2
                     ON 
                        R.second_user_id = U2.ID
                    WHERE (R.`first_user_id` = {$userID} OR R.`second_user_id` = {$userID})
                    AND `status` = 1