我正在尝试创建一个查询,列出在事件中排名前3位的每匹马的名称和身份2次或更多次。
这是我提出的问题:
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 :(得分:1)
你的条件是计算一匹马完成的不同位置的数量,这是错误的,因为你肯定想要包括一匹先完成两次的马。此外,您错过了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;
答案 1 :(得分: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;
答案 2 :(得分: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;
答案 3 :(得分: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