2012-12-07 21 views
0

我正在嘗試爲高爾夫數據庫編寫查詢。它需要返回statisticID = 1p2sStatistic > 65誰也有statisticID = 3p2sStatistic > 295的球員。
一個statisticID是駕駛距離,其他準確性等。我試過以下,但它不起作用,似乎無法在網上找到答案。我怎麼會這樣做,而不是做一個看法?用不同的值查詢不同的ID?

SELECT playerFirstName, playerLastName 
FROM player2Statistic, player 
WHERE player.playerID=player2Statistic.playerID 
AND player2Statistic.statisticID=statistic.statisticID 
AND p2sStatistic.3 > 295 
AND p2sStatistic.1 > 65; 

http://i.imgur.com/o8epk.png - DB

好一會纔剛剛輸出的玩家滿足這兩個條件時列表中的照片。

+0

以何種方式它不工作?語法錯誤?錯誤的結果? –

+0

請發佈這3個表格的表格結構。 –

+0

請向我們展示您的表格 - 以及一些示例數據的課程和預期產出。 – bonCodigo

回答

0

對於玩家沒有重複列表EXISTS半連接可能是最好的:

SELECT playerFirstName, playerLastName 
FROM player AS p 
WHERE EXISTS (
    SELECT 1 
    FROM player2Statistic AS ps 
    WHERE ps.playerID = p.playerID 
    AND ps.StatisticID = 1 
    AND ps.p2sStatistic > 65 
    ) 
AND EXISTS (
    SELECT 1 
    FROM player2Statistic AS ps 
    WHERE ps.playerID = p.playerID 
    AND ps.StatisticID = 3 
    AND ps.p2sStatistic > 295 
    ); 

列名和上下文來自提供的屏幕截圖。問題中的查詢並不完全覆蓋它。
注意括號,它們需要應付運算符優先級。

這可能是快(重複可能是不可能的):

SELECT p.playerFirstName, p.playerLastName 
FROM player   AS p 
JOIN player2Statistic AS ps1 USING (playerID) 
JOIN player2Statistic AS ps3 USING (playerID) 
AND ps1.StatisticID = 1 
AND ps1.p2sStatistic > 65 
AND ps3.StatisticID = 3 
AND ps3.p2sStatistic > 295; 

如果你的絕密品牌RDBMS的不支持SQL標準(USING (playerID),替補:ON ps1.playerID = p.playerID達到同樣的效果。

這是關係部門的情況。查找許多多個查詢技術來解決它下此相關的問題:
How to filter SQL results in a has-many-through relation

0

您的查詢中缺少statistic表。您需要根據您的where條款加入。

您還需要使用正確的連接語法。

以下版本的統計數據表連接兩次,一次爲「1」,一次是爲「3」:

SELECT distinct playerFirstName, playerLastName 
FROM player2Statistic p2s join 
    player p 
    on p.playerId = p2s.playerId join 
    statistic s3 
    on s3.StatisticId = p2s.statistcId and 
     s3.StatisticId = 3 join 
    statistic s1 
    on s1.StatisticId = p2s.statisticId and 
     s1.StatisticId = 1 
WHERE (s3.statistic > 295 and s1.statistic > 65) 
0

你將要加入到統計表格兩次:

SELECT playerFirstName, playerLastName 
    FROM player p 
    JOIN player2Statistic s1 
    on p.playerID=s1.playerID and s1.statisticID = 1 
    JOIN player2Statistic s3 
    on p.playerID=s3.playerID and s1.statisticID = 3 
WHERE s1.p2sStatistic > 65 and s3.p2sStatistic > 295;