Как вернуть значение, если строки нет?

Я читаю данные из таблицы через Qml + JS и мне нужно 100 возвращаемых данных, если запрос не нашел данных:

SELECT (CASE
        WHEN pourcenthour < pourcentcycle AND pourcenthour  < pourcentmonth THEN pourcenthour
        WHEN pourcentcycle < pourcenthour AND pourcentcycle < pourcentmonth THEN pourcentcycle
        WHEN pourcentmonth < pourcenthour AND pourcentmonth < pourcentcycle THEN pourcentmonth
        ELSE 100
        END) AS pourcent,
       ata,
       immatriculation
FROM part_log
WHERE removed = "false" AND immatriculation =? AND ata=?
ORDER BY pourcent DESC LIMIT 1

Я пытаюсь это:

SELECT IFNULL((CASE WHEN ... ELSE 100 END),100) AS pourcent, ...

Я получил ошибку:

Не удается прочитать свойство 'pourcent' из неопределенного

Я пытаюсь это:

SELECT IFNULL(SELECT (CASE WHEN ... ELSE 100 END) ,100) AS pourcent

Я получил эту ошибку:

Ошибка: рядом с "ВЫБОР": синтаксическая ошибка Невозможно выполнить инструкцию

1 ответ

Решение

То, что вы пишете в предложении SELECT, оценивается один раз для каждой строки. Это означает, что если нет строки, ничто в предложении SELECT не может вам помочь.

Вы можете использовать составной запрос, чтобы добавить еще одну строку. Окончательный предел гарантирует, что только part_log строка, если таковая была найдена, возвращается:

SELECT *
FROM (SELECT CASE ... END AS pourcent, ata, immatriculation
      FROM part_log
      WHERE removed = "false" AND immatriculation =? AND ata=?
      ORDER BY pourcent DESC LIMIT 1)
UNION ALL
SELECT 100, NULL, NULL
LIMIT 1;
Другие вопросы по тегам