加入和可能的子查询

时间:2011-10-24 13:47:07

标签: mysql sql

我有3个表:user,'user_friends'和'blog_post'

架构类似于以下内容:

user
id    |   username
-------------------
1     |   jim
-------------------
2     |   mary
-------------------
3     |   george
-------------------
4     |   julie



user_friends
user_id   |  friend_id
----------------------
1         |    2
----------------------
2         |    3
----------------------
2         |    4


blog_posts
id    |   title    |   user_id
------------------------------
1     |  test_1    |  1
------------------------------
2     |  test_2    |  2
------------------------------
3     |  test_3    |  3
------------------------------
4     |  test_4    |  4

好的,所以你可以看到每个用户都发了博文。用户有'朋友'。我正在寻找的是显示每个用户朋友的博客帖子。

所以,如果我想看看Jims的朋友帖子,那么应该显示mary的test_2帖子。如果我想看看mary的朋友帖子,它应该显示george和julie的test_3和test_4的帖子

有一种简单的方法吗?我可以使用子选择吗?

非常感谢

6 个答案:

答案 0 :(得分:2)

是的,您可以使用子选择。 这样的事情应该有效:

SELECT * FROM blog_posts WHERE user_id in 
(SELECT friend_id FROM user_friend WHERE user_id=1)

答案 1 :(得分:2)

可以这么简单(带有JOIN的变体):

SELECT bp.*
FROM   user_friends uf
JOIN   blob_posts bp ON bp.user_id = uf.friend_id
WHERE  uf.user_id = my_id

答案 2 :(得分:0)

Select *
From blog_posts
Where user_id in
    (Select friend_id
    From user_friends
    where user_id = 1);

最后的数字可以是您要查找的任何用户ID。

答案 3 :(得分:0)

您可以使用IN

SELECT * FROM blog_posts WHERE user_id IN (
SELECT friend_id FROM user_friends WHERE user_id = X)

答案 4 :(得分:0)

SELECT bp.* 
FROM blog_posts bp
INNER JOIN user_friends uf ON bp.user_id = uf.friend_id
INNER JOIN user u ON u.id = uf.user_id
WHERE u.username = "jim"

答案 5 :(得分:0)

尝试此请求:

SELECT bp.title
FROM blog_posts bp
JOIN user_friends uf ON (bp.user_id = uf.friend_id)
WHERE uf.user_id = 1;