2012-05-12 4 views
1

Im, создающий генератор таблицы в качестве школьного проекта. В MySQL у меня есть 3 таблицы, а именно процесс, операция, оценка. Все выглядело нормально, пока я не проверил свою кнопку «ADD column» в веб-приложении. Предыдущие сохраненные данные должны быть правильно прочитаны, но также включать новый столбец в формате, проблема заключается в том, что предыдущие запрошенные данные не содержат никаких значений для новой таблицы, поэтому я намеревался вернуть значение 0, если записей не было найдено, пытался IFNULL & COALESCE, но ничего не происходит (может быть, им просто использовать его неправильно)Верните ноль, если записей не найдено

  • процесс - ProcessId, ProcessName
  • операция - OperationID, operationName
  • счет - scoreID, оценка, ProcessId, OperationID, scoreType (оценка типов - SELF, GL, FINAL)

    ps = (PreparedStatement) dbconn.prepareStatement ("SELECT score FROM score WHERE processID =? и операцияID =? ? И тип = ORDER BY ProcessId ");

вот рис небольшого образца http://i50.tinypic.com/2yv3rf9.jpg

ответ

4

Причина, по которой 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

Смежные вопросы