2012-05-12 117 views
1

將表生成器作爲學校項目進行製作。 在MySQL中,我有3個表,即進程,操作,分數。一切都很好,直到我在Web應用程序中測試了我的「添加列」按鈕。 以前保存的數據應該被正確讀取,但也包括格式中的新列,問題是以前的數據查詢不包括新表的任何值,所以我打算如果沒有找到記錄返回得分0,試圖IFNULL & COALESCE但沒有任何反應(也許我只是用它錯)記錄未找到時返回零

  • 過程 - 的ProcessID,processName
  • 操作 - operationID,operationName
  • 比分 - scoreID,得分,的ProcessID,operationID,scoreType(分數 類型是SELF,GL,FINAL)

    ps =(PreparedStatement)dbconn.prepareStatement(「SELECT score FROM score WHERE processID =?和operationID =? ?和type = ORDER BY的ProcessID「);

這裏是一個小樣本http://i50.tinypic.com/2yv3rf9.jpg

回答

4
的PIC

IFNULL不工作的原因是,它只有在價值觀產生影響的結果集。沒有行有沒有值,所以它什麼也沒有。

首先,它可能會更好地做到這一點在客戶端上比在服務器上,但如果你必須在服務器上做到這一點,有幾種方法我可以想想。

試試這個:

SELECT IFNULL(SUM(score), 0) AS score 
FROM score 
WHERE processID=? and operationID=? and type=? 
ORDER BY processid 

SUM確保只返回一行。

如果您需要在表中包含多個匹配行返回多行,那麼你可以使用這個(省略ORDER BY爲簡單起見):

SELECT score 
FROM score 
WHERE processID = ? and operationID = ? and type = ? 

UNION ALL 

SELECT 0 
FROM (SELECT 0) T1 
WHERE NOT EXISTS 
(
    SELECT * 
    FROM score 
    WHERE processID = ? and operationID = ? and type = ? 
) 
+0

大答案..真的升值。 – Dhruvisha

+0

謝謝,正是我需要的 – JLawrence