5

私は3つのテーブルを持っています

役職

id | statement | date

特徴

id | feature

post_feature (Post と Feature の間の多対多テーブル)

post_id | feature_id

特定の期間の投稿について、さまざまな特徴とそれぞれの特徴の数を示すクエリを実行したいと考えています。SQL の学習を始めたばかりで、これをクラックできません。

次のものを試しましたが、正しい結果が得られませんでした。

 SELECT f.feature, count(f.feature)
   FROM  post_feature l 
   JOIN  features f ON (l.featureid = f.id AND l.featureid IN (
   select post.id from post where post.date > 'some_date'))
   GROUP BY f.feature
4

4 に答える 4

10

次のように試すことができます:

       SELECT f.feature, count(f.feature)
       FROM  post_feature l 
       JOIN  features f ON l.featureid = f.id 
       JOIN  post p ON l.post_id =p.id 
       WHERE p.date > 'some_date'
       GROUP BY f.feature
于 2012-09-16T17:31:17.273 に答える
2
select f.feature, count(*)
from  post_feature l inner join features f on l.feature_id = f.id
                     inner join post p on l.post_id = p.id
where p.date > 'some_date'
group by f.feature
于 2012-09-16T17:31:49.600 に答える
2

あなたの SQL は非常に独創的です。ただし、 IN 句での結合は間違った列にあります。postid から postid にある必要があります。

これでクエリは修正されますが、より良い書き方を次に示します。

 SELECT f.feature, count(f.feature)
 FROM  post p join
       post_feature pf
       on p.id = pf.postid join
       feature f
       on pf.featureid = f.id
 where post.date > 'some_date'
 GROUP BY f.feature

これですべての表が結合され、知りたい情報ごとにまとめられます。

于 2012-09-16T17:32:43.023 に答える
0

試す

   SELECT f.feature, count(DISTINCT f.feature) 
   FROM  post_feature l  
   JOIN  features f ON (l.featureid = f.id AND l.featureid IN ( 
   select post.id from post where post.date > 'some_date')) 
   GROUP BY f.feature 
于 2012-09-16T17:31:33.713 に答える