2012-04-20 83 views
0

我有两个表SQL - 加入两个表

用户:(ID,姓名)

关系:(USER_ID,relation_id)

USER_ID和relation_id是从两侧的IDS表users

我想要的是恢复所有与特定用户成为朋友的用户。

这里是我的SQL命令:不工作:

SELECT * 
FROM users 
NATURAL JOIN relations 
WHERE user_id IN (SELECT id FROM users WHERE name='John doe'); 

你能帮助我吗?

+0

'SELECT * FROM用户加入关于id = user_id WHERE user_id IN(SELECT id FROM users WHERE name ='John doe');' – 2012-04-20 11:38:12

+0

如何判断某人是否与其他人是朋友?我知道它在关系表中,但它背后的逻辑是什么? – 2012-04-20 11:41:00

+0

谢谢,但它给我的名字总是John Doe ... – Manitoba 2012-04-20 11:41:18

回答

4
SELECT users.* 
FROM relations 
INNER JOIN users 
    ON relations.relation_id = users.id 
WHERE relations.user_id = 12345; 

您还可以获得ID与子查询,就像你在你的例子一样:

WHERE relations.user_id IN (SELECT id FROM users WHERE name='John doe'); 
+0

效果很好,谢谢! – Manitoba 2012-04-20 11:57:08

1

试试这个

SELECT * FROM users as a 
JOIN relations as b on a.id = b.user_id 
WHERE b.user_id IN (SELECT id FROM users WHERE name='John doe') 
+0

不好,抱歉不起作用 – Manitoba 2012-04-20 11:54:14

+0

@Vodemki分享你的样本数据和期望的结果,然后我可以帮你进一步 – 2012-04-20 11:57:10

+2

谢谢,但谢德尔给了我解决方案。 – Manitoba 2012-04-20 12:31:43

1
SELECT user_id 
FROM relations re 
JOIN users us 
ON us.id = re.user_id 
WHERE relation_id = (
    SELECT id 
    FROM users 
    WHERE name = 'John Doe' 
) 

边注:不能使用NATURAL JOIN这里,“原因是没有列有两个表中相同名称和类型。

1

心不是这只是你正在寻找的用户id查询关系表的问题?

select * 
from relations 
where user_id = @IdYouArelookingFor or relation_id = @IdYouArelookingFor 
1
SELECT friend.* 
FROM users AS friend 
    JOIN relations AS r 
    ON r.relation_id = friend.id 
    JOIN users AS u 
    ON u.id = r.user_id 
WHERE u.name = 'John doe' ; 
1

友人同样relation_id?

SELECT a.name FROM users a JOIN relations b on a.id = b.user_id 
WHERE b.relation_id in 
(select relation_id from relations where id = 'userid of user you are looking for') 
AND a.id != 'userid of user you are looking for' 

如果你的逻辑是不同的请告诉它是如何工作

2

要获得所有的人都有,下面的查询将工作的关系..

SELECT * FROM用户我们携手关系重新ON us.id = re.relation_id WHERE re.user_id =( SELECT ID 来自用户的 其中name = '李四' )