我有两张桌子:
'用户表
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
可以帮帮我吗?
答案 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;