如何在sql查询之间组合列表?

时间:2013-10-11 18:56:23

标签: mysql sql

我有一个用户列表,他们观看了从查询中返回的视频(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相同。如何编写一个查询以显示观看视频和付费客户的用户列表?

2 个答案:

答案 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'

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