2013-10-11 53 views
0

我有一個用戶列表已經觀看了從查詢返回的視頻(1017):如何在SQL查詢之間組合列表?

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
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會有效地使用索引

+0

###代表什麼? – sharataka

+0

你忘了在第二個查詢中放置表名,我用###替代了它 –

+0

啊,那是我的錯!我現在編輯。我會加入它。 – sharataka

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' 

結果將成爲支付客戶和觀看特定視頻的所有用戶的列表。