2014-12-07 103 views
0

我有三個表在MySQL書籍,betlines,比賽。計數與兩個左連接和where子句

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

我想將它們連接起來,爲了看看有多少betlines爲這一特定聯盟都有每本書篩選matches.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不工作,因爲我已閱讀在其他的答案(這隻有一個左連接,也許這就是問題所在),所以該查詢返回的總betlines爲每本書,而不是隻有那些屬於與leagueId = 3匹配的投注線。

我在做什麼錯?

此查詢不顯示,總共有零個值,而正確地過濾了leagueId = 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

你從第一次加入的列計數,而不是第二個 – 2014-12-07 16:17:05

+0

把它作爲答案! – arisalexis 2014-12-07 16:21:50

回答

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

+0

這是因爲我古老:)不確定選擇哪個答案,因爲juergen和你發佈了正確的答案。 (所以新手) – arisalexis 2014-12-07 16:24:42

+0

這個,或者讓第二個外連接成爲一個內連... – 2014-12-07 16:25:33