1

首先,我很抱歉提出这样愚蠢的问题。我是 sql 新手。从互联网上学习基本的东西,但无法弄清楚。

假设我有一个名为 post 的表,用于存储人们的帖子。表结构是这样的。。

Post_id  | poster_id | text
1        | 12        | "hello this is a post"
2        | 15        | "Another post"
3        | 77        | "More counting"

有一个名为“Friends”的表,我在其中存储谁的朋友是谁。表结构是这样的。。

user_one  |  user_two
1         |  88
84        |  33
1         |  66

现在我可以使用这样的 SQL 从帖子中获取帖子

SELECT * FROM POST INNER JOIN frnends ON user_one = poster_id WHERE 1

但这将通过将两个表连接在一起来获得一个表,我不能做一些这样的逻辑吗?

SELECT post FROM post WHERE poster_id = (SELECT user_two,user_one FROM Friends WHERE user_one = MY_id OR user_two = MY_id

也许 MY_id 是一个变量 WHERE MY_id = 1

现在要做这种逻辑?

任何帮助都会非常棒。

4

2 回答 2

1

对不起,我缺乏评论的声誉。应该细化 Gamal 的解决方案,防止 My_id 的帖子被退回;

SELECT *
FROM post p
INNER JOIN friends AS f on p.poster_id IN (f.user_one, f.user_two)
WHERE My_id IN (f.user_one, f.user_two)
AND p.poster<>My_id;

或者,如果您也想要这些帖子;

SELECT *
FROM post p
INNER JOIN friends AS f on p.poster_id IN (f.user_one, f.user_two)
WHERE My_id IN (f.user_one, f.user_two)
AND p.poster<>My_id
UNION
SELECT *, My_id AS user_one, NULL AS user_two
FROM post p
WHERE p.poster=My_id;

问题在于,对于 My_id 所属的每个关系,Gamals 的建议将返回 My_id 的每个帖子一次。

于 2013-08-19T11:10:37.190 回答
0

试试这个:

   SELECT * 
    FROM [sample].[dbo].[posts] a inner join [sample].[dbo].[friends1] b on  a.posterId=b.user_one or a.posterId=b.user_two where a.PosterId=12
于 2013-08-19T09:52:33.660 回答