0

如果我必须找到多次观看同一视频的所有用户,那么我将使用以下查询。

SELECT userid AS users,video_id 
FROM watching_list GROUP BY userid , video_id HAVING COUNT(*) > 1;

^^它确实给了你,对吧?如果 watch_list 包含用户观看的 userid 和 videoid 以及日期时间戳。

我想做的是将它加入到用户表中,基于用户ID,来查找用户名等,而不仅仅是用户ID。

我试着做简单的加入,当然它打破了我。

4

2 回答 2

4
SELECT Users.Name, Users.userid AS users,video_id 
FROM watching_list 
    JOIN Users
        ON Users.UserID = watching_list.UserID
GROUP BY Users.userid , video_id, Users.Name
HAVING COUNT(*) > 1;

为什么会这样断?它应该是同一用户,因此将同一个人的其他信息添加到group by不应导致更改

这是一个粗略的、快速的 SQLFiddle 来证明这一点

于 2012-04-26T03:38:56.293 回答
3

一个有点不优雅的方法是这样的:

Select USERS.LAST_NAME,
       USERS.FIRST_NAME,
       double_watchers.VIDEO_ID
  FROM USERS,
      (SELECT userid AS users,
              video_id 
         FROM watching_list
        GROUP BY userid , video_id
       HAVING COUNT(*) > 1) double_watchers
Where double_watchers.userid = users.id;

我正在使用您的原始查询创建一个内联表(不确定术语),然后将其加入到 USERS 表中。可能有一种更有效的方法可以做到这一点,但是我现在没有测试实例可以进行试验。

于 2012-04-26T03:36:35.030 回答