2013-11-30 5 views
1

Я хочу получить max no из invgatepass по времени и дате, и если он возвращает null, тогда я хочу запустить другой запрос на основе разных условий, если это также не удается получить какие-либо данные, тогда я хочу получить «1». Это то, что я хочу. Но внутри COALESCE функция, второй параметр не может быть запросом. Может ли кто-то решить эту проблему. Я не хочу использовать два отдельных запроса после проверки условия внутри php-кода.выполнить запрос, если другой запрос запрашивает значение null в mysql

SELECT COALESCE(
      MAX(SUBSTRING_INDEX(InwardNo, '-', -1))+1, 
      SELECT COALESCE 
        (
         MAX(SUBSTRING_INDEX(InwardNo, '-', -1))+1, 
         1 
        ) 
        FROM 
        invgatepass 
        WHERE 
        DATE(CreationDateTime)=CURDATE() 
         AND 
        (EXTRACT(HOUR FROM CreationDateTime)) < '17' 

      ) 
      AS CODE FROM 
      invgatepass 
      WHERE 
      DATE(CreationDateTime)=DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
      AND 
      (EXTRACT(HOUR FROM CreationDateTime)) >= '17'" 
+0

Является ли это SQL Server? Пожалуйста, добавьте RDBMS в вопрос. –

+0

Это не SQL Server. это mysql. –

ответ

0

Внутри функции coalesce допускается подзапрос, но подзапрос должен быть заключен в фигурные скобки.

Посмотрите на это демо: http://www.sqlfiddle.com/#!2/fb3d8/2

Этот запрос компилируется нормально, потому что все подзапросы заключены в фигурные скобки:

SELECT coalesce(
     (SELECT null), 
     (SELECT id FROM test WHERE id = 10), 
     (SELECT id FROM test WHERE id = 4), 
     (SELECT id FROM test WHERE id = 2) 
     ) result 
; 

Этот запрос вызывает ошибку синтаксиса, поскольку второй подзапрос не имеет фигурные скобки вокруг него:

SELECT coalesce(
     (SELECT null), 
     SELECT id FROM test WHERE id = 10, 
     (SELECT id FROM test WHERE id = 4), 
     (SELECT id FROM test WHERE id = 2) 
     ) result 
; 
0

Примечание стороны: Вам не нужно 2 Coalesce:

coalesce (null, null, 1) 

примерно такой же, как

coalesce (null, coalesce (null, 1)) 
Смежные вопросы