如何在场景中使用INNER JOIN?

时间:2009-02-24 09:47:45

标签: mysql inner-join

我有两张桌子:

'用户表

id      username  
----    -------- 
0001    user1          
0002    user2          
0003    user3          
0004    user4     

'朋友'表

user_id  friend_id  friend
-------  ---------  ------
0001     0004       1
0002     0004       1
0005     0004       0

如何显示所有user4朋友的名字?如果在朋友表中,朋友列,1表示他们是朋友,0表示他们仍然不是朋友。

我使用INNER JOIN,它看起来像这样:

SELECT users.username
FROM `users`
INNER JOIN `friends` ON users.id = friends.friend_id
WHERE friends.user_id = 0004
  AND friend = 1;

但我得到的是:

user4和user4而不是user1和user2

可以帮帮我吗?

10 个答案:

答案 0 :(得分:4)

SELECT u.username
FROM   Friends f, Users u
WHERE  f.user_id = u.id
       AND f.friend = 1
       AND f.friend_id = '0004'

答案 1 :(得分:3)

SELECT users.username
FROM `users`
INNER JOIN `friends` ON users.id = friends.user_id
WHERE friends.user_id = 0004
  AND friend = 1;

答案 2 :(得分:1)

select u.username
from friends f, users u
where f.friend_id='0004' and f.friend=1 and f.id=u.user_id;

编辑: 这与:

相同
select u.username
from friends f inner join users u on f.id=u.user_id
where f.friend_id='0004' and f.friend=1;

答案 3 :(得分:1)

您确定不想将friends表链接到user_id上的users表而不是friend_id吗?然后更改where子句以使用friend_id而不是user_id。 有不同的格式化连接的方法,但使用内部连接的方式看起来很好。

SELECT users.username
FROM `users` 
INNER JOIN `friends` ON users.id = friends.user_id 
WHERE friends.friend_id = 0004   
AND friend =1

答案 4 :(得分:1)

你的意思是这样吗?

SELECT u.username
FROM friends AS f
INNER JOIN users AS u USING user_id
WHERE f.friend_id = 0004 AND f.friend = 1

答案 5 :(得分:1)

select U.Username
from
    Users as U
    inner join Friends as F on U.Id = F.user_id and F.friend = 1
where
    F.friend_id = '0004'

如果朋友表只是一个映射表,那么你不想两种方式映射?

select U.Username
from
    Users as U
    left outer join
    (
        select 
            F.user_id as Id
        from
            Friends as F
        where
            F.friend_id = '0004'
        and
            F.friend = 1

    ) as Mapping1 on Mapping1.Id = U.id
    left outer join
    (
        select 
            F.friend_id as Id
        from
            Friends as F
        where
            F.user_id = '0004'
        and
            F.friend = 1

    ) as Mapping2 on Mapping2.Id = U.id

where
    Mapping1.Id is not null or Mapping2.Id is not null

答案 6 :(得分:0)

SELECT u.username
FROM Friends f, Users u
WHERE f.friend = 1 AND 
 ((f.friend_id = @userid AND f.user_id = u.id) OR
  (f.user_id = @userid AND f.friend_id = u.id))

答案 7 :(得分:0)

dmcgiv有一个重点,你需要考虑朋友映射是否是双向的(即,如果A是B的朋友,那么B自动是A的朋友)。您需要检查您感兴趣的用户是否在Friends表映射的任何一侧。

您可以使用dmcgiv的方式,或者另外一种方法是在添加友谊时将两个方向的链接插入到Friends表中。例如,如果用户0004是具有用户0006的朋友,则您将插入到Friends表中:

user_id | friend_id | friend
0004    | 0006      |   1
0006    | 0004      |   1

顺便说一下,我认为你真的不需要朋友专栏。除非有某些理由要跟踪“非朋友”,否则如果友谊结束,您可以从Friends表中删除映射。

答案 8 :(得分:0)

从用户中选择用户名 在哪里us.id in( 从用户u中选择f。[user_id] 内心加入朋友f ON u.id = f.friend_id 其中f.friend = 1)

答案 9 :(得分:0)

尝试此查询

select u.username from users u join friends f on u.id=f.user_id  and f.friend=1;