2016-05-27 10 views
2

イベントのトップ3で2回以上終了したすべての馬の名前とIDをリストするクエリを作成しようとしています。サブクエリーを持ち、カウント(distinct)条件を持つクエリ

これらは、私が使用している二つの表のとおりです。enter image description here

enter image description here

をそして、これは私が作ってみたクエリです:私は明らかに何かをやった

SELECT horse.horse_id, horse.name FROM horse 
INNER JOIN 
(SELECT horse_id 
FROM entry 
WHERE place in ('1', '2', '3') 
HAVING count(distinct place) >1) 
entry on horse.horse_id=entry.horse_id; 

間違っている、私はこのクエリを実行すると、それがフラッシュとボクサーになる必要があるときだけ、フラッシュが来るので。

+0

あなたはなぜ –

+0

expeted結果を投稿することができます句を持つことでの別個のカウント?? –

+1

私は、上位3位(すなわち、1位、2位または3位)に2回以上置かれた各馬の名前とhorse_idを取得したいと考えています。私はボクサーが3、2、3を得ている間、フラッシュは1と1を得たので、それはフラッシュ(101)とボクサー(201)でなければならないと思う。 – FlimFlam

答えて

1

あなたは、馬が終わった別個の場所の数を数えますが、これは間違っています。最初に2回終わった馬を間違いなく含むことが望ましいからです。さらに、group by句がありません:

SELECT  horse.horse_id, horse.name 
FROM  horse 
INNER JOIN (SELECT horse_id 
      FROM  entry 
      WHERE place IN (1, 2, 3) -- should probably be numbers, BTW 
      GROUP BY horse_id 
      HAVING COUNT(*) > 1) entry ON horse.horse_id = entry.horse_id; 
0

ここに移動します。

SELECT horse.horse_id, horse.name FROM horse 
    INNER JOIN 
    (SELECT horse_id 
    FROM entry 
    WHERE place in ('1', '2', '3') 
    GROUP BY horse_id 
    HAVING count(*) >1) 
    entry on horse.horse_id=entry.horse_id; 
1

あなたは条件によってグループを逃しました。他の人のよう

SELECT horse.horse_id, horse.name FROM horse 
INNER JOIN 
(SELECT horse_id 
FROM entry 
WHERE place in ('1', '2', '3') 
group by horse_id 
HAVING count(*) >1) 
entry on horse.horse_id=entry.horse_id; 
0

GROUP BY句が欠落している指摘が、私は、クエリを簡素化するために、サブクエリを使用しないようにできると思いき: -

SELECT horse.horse_id, horse.name 
FROM horse 
INNER JOIN entry 
ON horse.horse_id = entry.horse_id 
WHERE entry.place IN ('1', '2', '3') 
GROUP BY horse.horse_id 
HAVING COUNT(*) > 1 
関連する問題