我不确定是否有更好的方法。也许我只是有一个我没有看到的语法错误。无论哪种方式都是问题。
我正在尝试获取我的“朋友”的数量(由我跟随他们并且他们跟随我,加入1创建派生表),这些数据也跟随我在数据库中查看的对象。 (加入2)。这是一个自定义函数而不是存储过程,所以我可以在几个地方重用它。唯一相关的列是profile_id和follower_profile_id。 profile_id是要遵循的配置文件,follower_profile_id是执行以下操作的配置文件。
这是查询:
set followsThatCorrelate =
(
Select count(id)
from
(
select * from followers as shouldFollow
join
(
(select *
from followers
where followers.profile_id = authUserId
) as followingMe
join
(select *
from followers
where followers.follower_profile_id = authUserId
) as myFollows
on myFollows.profile_id = followingMe.follower_profile_id
) as friends1
on shouldFollow.follower_profile_id = friends1.follower_profile_id
where shouldFollow.profile_id = otherId
)
);
它说我的语法错误是在我对派生表朋友进行别名之后。无论我放在那之后它总是抛出异常。
答案 0 :(得分:1)
CREATE TABLE followers (
profile_id NVARCHAR(5),
follower_profile_id NVARCHAR(5)
);
INSERT INTO followers
VALUES ('Tom','Dick'),('Dick','Tom'),('Carry', 'Tom'),('Tom','Carry'),('John','Tom');
SET @authUserID = 'Tom';
SELECT followsme.follower_profile_id as followerID
FROM followers followsme
-- Join back to the followers table
INNER JOIN followers ifollow
-- get all of your followers followers
ON followsme.follower_profile_id = ifollow.profile_id
-- filter your followers followers to only you.
AND ifollow.follower_profile_id = @authUserId
-- this restricts the original set to only your followers
WHERE followsme.profile_id = @authUserId