用两个左连接和where子句计数

时间:2014-12-07 16:14:26

标签: mysql sql

我在MySQL书籍中有三张表,下注,匹配。

books.bookId=betlines.bookId
betlines.bookId=books.bookId
matches.matchId=betlines.matchId

我想连接它们并过滤match.leagueId = 3,以便查看每个图书对这个特定联盟有多少下注。

SELECT name,books.bookId,COUNT(betlines.betlinesId) as total FROM books 
LEFT JOIN betlines on books.bookId=betlines.bookId 
LEFT JOIN matches on matches.matchId=betlines.matchId 
     AND matches.leagueId=3 
GROUP BY books.bookId;

AND matches.leagueId = 3不起作用,因为我已经阅读了其他答案(只有一个左连接,也许这就是问题)所以这个查询返回每本书的总赌注而不仅仅是那些赌注属于与leagueId = 3的比赛。

我做错了什么?

此查询未显示总计零值的书籍,但正确过滤了联盟ID = 3

SELECT name,books.bookId,COUNT(betlines.betlinesId) as total FROM books,betlines,matches 
WHERE matches.matchId=betlines.matchId 
AND matches.leagueId=3 AND books.bookId=betlines.bookId 
GROUP BY books.bookId;

1 个答案:

答案 0 :(得分:0)

我认为您只需要将COUNT()改为Matches而不是BetLines

SELECT name, b.bookId, COUNT(m.matchId) as total
FROM books b LEFT JOIN
     betlines bl
     on b.bookId = bl.bookId LEFT JOIN
     matches
     on m.matchId = bl.matchId AND m.leagueId = 3 
GROUP BY b.bookId;

我添加了表别名,使查询更易于编写和阅读。

至于您的上一个查询,它使用的是仅支持内部联接的古老join语法。您应该使用显式连接,尤其是因为在这种情况下您需要left join