我正在开发一个分析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。但我不知道这是否是正确的步骤。我在用户的投票和问题帖子之间找不到任何关联
答案 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'
完成。强>
如果您的课程使用旧语法;考虑获得更好的课程。