我有两张表(MYSQL)
入场表
Event_id | Horse_id | Place
101 101 1
101 102 2
101 201 3
101 301 4
102 201 2
103 201 3
201 101 1
301 301 2
401 102 7
HORSE表
Horse_id Name
101 Flash
102 Star
201 Boxer
301 Daisy
401 Snowy
我需要列出两次或两次以上放置(1,2或3)的马的马匹和名称。 我能想出的最好的东西(我需要做一个子查询)
select horse_tbl.horse_id, horse_tbl.name
from horse_tbl
left join entry_tbl
on horse_tbl.horse_id = entry_tbl.horse_id
where place<4(
select count(horse_id)>1));
非常感谢任何帮助
答案 0 :(得分:1)
您的查询是在正确的轨道上,但您应该在WHERE
子句中使用GROUP BY
和条件聚合,而不是使用HAVING
子句来检查地点: / p>
SELECT
h.horse_id,
h.name
FROM horse_tbl h
LEFT JOIN entry_tbl e
ON h.horse_id = e.horse_id
GROUP BY
h.horse_id,
h.name
HAVING SUM(CASE WHEN e.place IN (1, 2, 3) THEN 1 ELSE 0 END) >= 2
<强>输出:强>
在这里演示: