我在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;
答案 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
。