0

我有一个用户列表,这些用户观看了从查询返回的视频 (1017):

select distinct user_id from video_views 
where video_viewable_id = 1017;

从以下查询中,我也有一组不同的用户(付费):

select id, is_paying_customer from users
where is_paying_customer = '1';

video_views 表中的 user_id 与 users 表中的 id 相同。如何编写一个查询来显示既观看了视频又是付费客户的用户列表?

4

2 回答 2

2
select distinct user_id from video_views 
where video_viewable_id = 1017 and user_id in (select id from users
where is_paying_customer = '1')

或者您可以使用连接语法

select distinct user_id from video_views 
inner join users as t on (video_views.user_id=t.id and t.is_paying_customer = '1')
where video_viewable_id = 1017

另外,由于用户是主表,我会这样做:

select id from users where is_paying_customer = '1' and
`id` in (select user_id from from video_views where video_viewable_id = 1017)

在这种情况下,您不需要 distinct 并且 mysql 将有效地使用索引

于 2013-10-11T18:57:47.603 回答
0

如果我对您的理解正确,则以下内容应该有效:

SELECT DISTINCT U.id
FROM users U
INNER JOIN video_views V
ON U.id = V.user_id 
WHERE V.video_viewable_id = 1017
AND U.is_paying_customer = '1'

结果将是所有付费客户并观看过特定视频的用户的列表。

于 2013-10-11T19:08:58.003 回答