Mysql加入派生表

时间:2014-07-02 21:34:56

标签: mysql

我不确定是否有更好的方法。也许我只是有一个我没有看到的语法错误。无论哪种方式都是问题。

我正在尝试获取我的“朋友”的数量(由我跟随他们并且他们跟随我,加入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
            )
        );

它说我的语法错误是在我对派生表朋友进行别名之后。无论我放在那之后它总是抛出异常。

1 个答案:

答案 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