Mysql 具有子查询和计数(不同)条件的查询

Mysql 具有子查询和计数(不同)条件的查询,mysql,sql,select,Mysql,Sql,Select,我试图创建一个查询,列出在一个事件中2次或更多次进入前3名的每匹马的名字和id 这是我正在使用的两个表: 这就是我提出的问题: 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.

我试图创建一个查询,列出在一个事件中2次或更多次进入前3名的每匹马的名字和id

这是我正在使用的两个表:

这就是我提出的问题:

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;

我显然做错了什么,因为当我运行这个查询时,只有flash出现,而它应该是flash和boxer

您的条件计算了一匹马完成的不同位置的数量,这是错误的,因为您肯定希望包括一匹先完成两次的马。此外,您缺少一个
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;
给你

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;

你错过了分组比赛

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;

正如其他人指出的,您缺少GROUPBY子句,但我认为您可以避免使用子查询来简化查询:-

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

你能公布结果吗?为什么在Having子句中使用distinct count?我希望能得到每匹马的名字和马匹id,这匹马排在前3名(即第一、第二或第三名)2次或2次以上。我认为应该是flash(101)和boxer(201),因为flash得到了1和1,而boxer得到了3、2和3。