0

我正在做一个项目来分析 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。但我不知道这是否是正确的一步。而且我找不到用户投票和问题帖子之间的任何联系

4

1 回答 1

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

停止在表名之间使用逗号。 '这个简单的步骤将迫使您更仔细地考虑连接。

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

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'

完毕。

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

于 2017-11-03T07:39:14.663 回答