2011-04-09 68 views
0

選擇我有兩個表中的字段的巫幫[僅需提到]MySQL的兩個表

- partners 
    - id [PRI, int] 
    - name [varchar(20)] 
    - match [=matches.id] 
    - can_call [int] 


- players 
    - registered [0/1] 
    - partner [=partners.id] 
    - match [=matches.id] 

現在,我需要一個查詢,這將使一個int - 有多少球員能的合作伙伴之一調用;

要獲得多少玩家所要求的任何比賽的任何搭檔,我使用:

SELECT COUNT(id) 
FROM players 
WHERE registered=1 
    AND partner=PARTNER_ID 
    AND match=MATCH_ID 

現在,我需要有這樣的事情:

SELECT (can_call-THE_ABOVE) as free 
FROM partners 
WHERE match=MATCH_ID 

而且我不知道如何做到這一點:)

的理念是:獲得免費的位置,因爲我們想爲我們想要的比賽的合作伙伴,然後選擇。減去COUNT(ID)的球員,已經被註冊了那場比賽由合作伙伴。

謝謝! [我希望我有道理^ _ ^]

編輯:我已經解決了(在兩個加入答案之前)。我可能會用我的解決方案,因爲它更簡單;但我會看起來更到其他的答案,一旦我會想成爲MySQL的用戶advnaced,謝謝大家^^

+0

爲什麼不使用加入? – 2011-04-09 19:22:31

+0

什麼是你的「總」從......它是一個固定的「最大團隊規模」的東西? – DRapp 2011-04-09 19:22:57

+0

@Ashwini:因爲真正的初學者在MySQL方面,所以加入,使盡可能多的意義,因爲我雖然我會用。 @DRapp - 我的錯誤,totall實際上是'can_call',將在代碼中取代它。 – 2011-04-09 19:24:45

回答

1

沒關係,理解了它;它是完全按照我上面的僞代碼:

SELECT can_call - (SELECT COUNT(id) FROM players WHERE ...) as free 
    WHERE match=MATCH_ID AND id=PARTNER_ID 

^^

2
Select P.name 
    , P.can_call - Coalesce(Calls.CallCount,0) As CanCall 
From partners As P 
    Left Join (
       Select partner, match, Count(*) As CallCount 
       From players As P1 
       Where registered = 1 
       Group By partner, match, 
       ) As Calls 
     On Calls.partner = P.id 
      And Calls.match = P.match 
Where P.match = MATCH_ID 
+0

這看起來真的鐵桿......我可能會使用它作爲答覆我爲什麼不考慮'JOIN' ...謝謝你,但! :) – 2011-04-09 19:26:43

+0

我想你應該intercgange兩個'FROM ...'條款 – 2011-04-09 19:45:47

+0

@yypercube - 是的。這是我的心理錯位。 – Thomas 2011-04-09 19:50:47

1
SELECT pa.can_call-COUNT(pl.id) 
     AS free 
FROM partners pa 
    LEFT JOIN players pl 
    ON pl.registered=1 
     AND pl.partner=pa.id 
     AND pl.match=pa.match 
WHERE pa.id=PARTNER_ID 
    AND pa.match=MATCH_ID 
GROUP BY pa.id 
     , pa.match 
+0

我認爲可以放棄GROUP BY。 – 2011-04-09 19:40:31

+0

@亞當:當你開始考慮JOIN時,你可以用它作爲藉口。 – 2011-04-09 19:48:24