我有一个用户列表,他们观看了从查询中返回的视频(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相同。如何编写一个查询以显示观看视频和付费客户的用户列表?
答案 0 :(得分: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)
在这种情况下你不需要明确的,mysql会有效地使用索引
答案 1 :(得分: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'
结果将是付费客户和观看过特定视频的所有用户的列表。