SQL - 如何从StackExchange数据库获取用户最喜欢的帖子标题

时间:2017-11-02 05:23:57

标签: sql stackexchange

我正在开发一个分析Stackoverflow用户行为的项目,我需要从stackoverflow获取数据,我需要获取的数据之一是获取用户最喜欢的帖子stackexchange数据库中的标题。现在,我只想出如何获得用户最喜欢的信息如下:

select VT.name, U.DisplayName
from VoteTypes VT, Votes V, Users U
where VT.Id = 5 and
           VT.Id = V.VoteTypeId and
           U.Id = V.UserId and 
           U.Id = '85597'

我认为下一步是查找用户投票的帖子,然后匹配userId。但我不知道这是否是正确的步骤。我在用户的投票和问题帖子之间找不到任何关联

1 个答案:

答案 0 :(得分:0)

SELECT
      vt.name
    , u.DisplayName
FROM VoteTypes vt 
   , Votes v        <<<<<<<<< not good
   , Users u        <<<<<<<<< not good
WHERE vt.Id = 5
AND vt.Id = v.VoteTypeId  <<<<<<<<< join predicate (vt = v)
AND u.Id = v.UserId       <<<<<<<<< join predicate (u = v)
AND u.Id = '85597

只需在表名之间使用逗号停止。&#39;这个简单的步骤将迫使您更仔细地考虑联接。

将连接谓词移动到它们在 ON 之后引用的表格。 (连接谓词引用运算符两侧的不同表,例如equals。)

SELECT
      vt.name
    , u.DisplayName
FROM VoteTypes vt
   , Votes v ON vt.Id = v.VoteTypeId
   , Users u ON u.Id = v.UserId
WHERE vt.Id = 5
AND 
AND 
AND u.Id = '85597'

用适当的连接类型替换那些可怕的逗号,并整理。

SELECT
      vt.name
    , u.DisplayName
FROM VoteTypes vt
INNER JOIN Votes v ON vt.Id = v.VoteTypeId
INNER JOIN Users u ON u.Id = v.UserId
WHERE vt.Id = 5
AND u.Id = '85597'

完成。

如果您的课程使用旧语法;考虑获得更好的课程。