mysql子查询,其中值出现两次或更多次

时间:2017-06-16 03:50:21

标签: mysql

我有两张表(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));

非常感谢任何帮助

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

<强>输出:

enter image description here

在这里演示:

Rextester