如何在场景中使用INNER JOIN?
问题描述:
我有2个表:如何在场景中使用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
能帮我吗?
答
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))
答
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;
答
SELECT users.username
FROM `users`
INNER JOIN `friends` ON users.id = friends.user_id
WHERE friends.user_id = 0004
AND friend = 1;
答
你确定你不想朋友表链接到用户表上,而不是USER_ID的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
答
SELECT u.username
FROM Friends f, Users u
WHERE f.user_id = u.id
AND f.friend = 1
AND f.friend_id = '0004'
答
你的意思是这样的吗?
SELECT u.username
FROM friends AS f
INNER JOIN users AS u USING user_id
WHERE f.friend_id = 0004 AND f.friend = 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
答
dmcgiv有你需要考虑一下,如果朋友的映射是双向的(即,如果A是朋友为B,那么B将自动为朋友A)很重要的一点。您需要检查您感兴趣的用户是否位于Friends表格映射的任一侧。
你可以做到这一点dmcgiv的方式,或者另一种方式是只插入双向链接到朋友表当您添加了友谊。例如,如果用户0004朋友用户0006你会插入到表友:
user_id | friend_id | friend
0004 | 0006 | 1
0006 | 0004 | 1
我不认为你真的需要一个朋友列,顺便说一句。除非有理由追踪“非朋友”,否则只要友情结束,您就可以从朋友表中删除映射。
答
选择的用户名来自用户的我们 其中us.id在( ,选择F [USER_ID]从用户ü 内加入朋友˚F ON u.id = f.friend_id 其中f。朋友= 1)
答
尝试此查询
select u.username from users u join friends f on u.id=f.user_id and f.friend=1;
没有u.user_id场。 – 2009-02-24 10:08:30
谢谢指出。修复它(和其他一些东西) – tehvan 2009-02-24 10:12:04
我试过所有的答案。只需将u.user_id更改为u.id,其工作... 但chris mehrdad和gordon的回答不起作用。 – roa3 2009-02-24 10:14:23