2012-10-02 30 views
1

我試圖計算一段時間內男性賽馬(Sire)的所有後代獲得的金額。由贏得的金額最高的父親列出。 我運行查詢並獲得結果後,有一個問題,我不能顯示姓氏,只有他們的ID。Mysql Self加入以查找同一個表中的父母子女關係

SELECT `horses`.`SireID` AS `SireID` , `horses`.`HorseName` AS `Sire Name`, 
        COUNT( `runs`.`HorsesID`) AS `Runs` , 
        COUNT( 
          CASE WHEN `runs`.`Finish` =1 
           THEN 1 
           ELSE NULL 
           END) AS `Wins` , 
        CONCAT(FORMAT((
           COUNT( 
             CASE WHEN `runs`.`Finish` =1 
              THEN 1 
              ELSE NULL 
              END)/COUNT 
            ( `runs`.`TrainersID`)) *100, 0) , '%' 
       ) AS `Percent` , 
      FORMAT(SUM( `runs`.`StakeWon`) , 0) AS `Stakes` 
FROM runs 
INNER JOIN horses ON runs.HorsesID = horses.HorsesID 
INNER JOIN races ON runs.RacesID = races.RacesID 
WHERE `races`.`RaceDate` >= STR_TO_DATE( '2012,07,01', '%Y,%m,%d') 
AND `races`.`RaceDate` < STR_TO_DATE( '2012,07,01', '%Y,%m,%d') + INTERVAL 1 
MONTH 
AND `horses`.`SireID` <> `horses`.`HorsesID` 
GROUP BY `horses`.`SireID`, `horses`.`HorseName` 
ORDER BY SUM( `runs`.`StakeWon`) DESC 

例如,在馬錶中記錄一匹馬有馬匹,他們也有一個sireID(他們的父親)。 sireID在同一張表中的另一個記錄中具有相同的horsesID,因爲它也是一匹馬

基本上我需要將horseName映射到sireID。

我認爲自我加入會起作用。

`AND `horses`.`SireID` <> `horses`.`HorsesID`` 

但它不會返回對應於SireID的正確的Sire名稱。

回答

4

馬種畜你可以在表本身的聯接。這裏有一個更簡單的例子:

SELECT Horses.HorseID, Horses.HorseName, Horses.SireID, b.HorseName as SireName 
FROM Horses 
LEFT JOIN Horses b ON (Horses.SireID = b.HorseID) 

你或許可以弄清楚如何從這裏添加條件。

+0

好了,那很有效:)我沒有想過LEFT JOIN能夠爲此工作,感謝啓蒙。 – stemie

1

加入上sires.HorsesID = horses.SireID

+0

沒有sires表。父親出現在父子關係的馬錶中。 SireID,HorseID,Horsename。 – stemie

+0

我意識到沒有sires表..我們重新加入馬錶,然後命名該協會:「sires」。所以我們現在有2個關聯到馬錶..一個使用默認的'馬'..和其他's' –

+0

我很困惑,我怎麼能做到這一點?我一直在收到「未知專欄」 – stemie