2016-07-17 5 views
1

目的: 特定のカテゴリに投稿を投稿したユニークユーザーの数を確認したいと思います。私は明確な見つけるしたいのですが、今サブクエリを使用してテーブル1とテーブル2のユニオンで異なる値を計算する

id, 
user_id, 
post_id 

id, 
user_id, 
category 

好き:

は、私は2つのテーブルpostsと、次のフィールドとlikes

投稿がありpostsベースのuser_id値d特定のカテゴリの likesの異なるuser_id値だけでなく、これらの結果セットの和も表示されます。

私はこれを達成するために、次のMySQLのクエリを使用しています:

SELECT user_id FROM posts WHERE category = 0 union SELECT user_id from likes where likes.post_id in (select id from posts where category = 0)

することなく、これを達成するためのより良い方法があるのなら、私は望ましい結果を取得していた場合、私は知りたいのですがサブクエリを使用します。

あなたがそれを何かdownvoteする前に、コメントの同じ理由を言及してください。

答えて

1

パフォーマンスを向上させるには、サブクエリをINNER JOINで置き換えます。

SELECT 
    user_id 
FROM posts 
WHERE category = 0 

UNION 

SELECT 
    likes.user_id 
FROM likes 
INNER JOIN posts 
ON likes.post_id = posts.id 
WHERE posts.category = 0; 

likes.post_idが適切にインデックス化された場合、それははるかに高速になり、posts.idPK/indexedです。

+0

こんにちは、71! 私はすでにここで提案したことを試しました。 この場合、次のエラーが発生します。 'フィールドリストの 'user_id'列が曖昧です。 ' –

+1

今すぐお試しください。訂正されました!私の名前をデコードしてくれてうれしいです:p – 1000111

+0

私が使ったクエリには、私が得た結果とは異なる結果が出ています。 その理由を説明できますか? –

関連する問題