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 と同じです。ビデオを視聴し、顧客に支払いを行っているユーザーのリストを表示する 1 つのクエリを作成するにはどうすればよいですか?

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 に答える