MYSQL - Получается нормально в результате подзапроса? - PullRequest
0 голосов
/ 25 января 2019

Мой Workbench выдает мне «ОК» без какой-либо дополнительной информации. Из-за предыдущих вопросов я узнал, что проблема в подзапросе. Но я не знаю, в чем проблема.

Это мой код:

**CREATE FUNCTION crew_headcount(FlightNo varchar(7), DepartureDateAndTimeUTC timestamp)
RETURNS INT 
DETERMINISTIC
RETURN CASE
    WHEN  
        FlightNo IN(flightexecution.FlightNo) 
        AND DepartureDateAndTimeUTC IN(flightexecution.DepartureDateAndTimeUTC)
    THEN 
         (SELECT COUNT(crew.EmployeeID) 
         FROM crew, flightexecution 
         WHERE crew.FlightNo = flightexecution.FlightNo 
             AND FlightNo = flightexecution.FlightNo 
             AND DepartureDateAndTimeUTC = flightexecution.DepartureDateAndTimeUTC)
    ELSE -1 
    END;**

Моя цель состоит в том, чтобы я заполнил свою функцию параметрами FlightNO и DepatureTime, и если эти два значения могут быть найдены в доступной таблице, число членов экипажа должно получиться в результате, иначе «-1».

Надеюсь, кто-нибудь может мне помочь. Спасибо

1 Ответ

0 голосов
/ 25 января 2019

Я не понимаю, почему будет возвращаться «ОК», кроме того факта, что функция выполняется без проблем. Как у вас работает функция в MySQL Workbench? Какая версия Workbench?

Вы можете попробовать рефакторинг WHEN-части вашего оператора CASE:

CASE
    WHEN  
        (SELECT COUNT(*) 
         FROM flightexecution 
         WHERE flightexecution.FlightNo = FlightNo AND
               flightexecution.DepartureDateAndTimeUTC = DepartureDateAndTimeUTC) > 0
    THEN 
         (SELECT COUNT(crew.EmployeeID) 
         FROM crew, flightexecution 
         WHERE crew.FlightNo = flightexecution.FlightNo 
             AND FlightNo = flightexecution.FlightNo 
             AND DepartureDateAndTimeUTC = flightexecution.DepartureDateAndTimeUTC)
    ELSE -1 
END

В конечном счете, это может быть полностью преобразовано в один оператор SELECT:

SELECT CASE WHEN COUNT(crew.EmployeeID) > 0 
            THEN COUNT(crew.EmployeeID) 
            ELSE -1 
       END AS Result
FROM crew
JOIN flightexecution ON crew.FlightNo = flightexecution.FlightNo
WHERE FlightNo = flightexecution.FlightNo AND 
      DepartureDateAndTimeUTC = flightexecution.DepartureDateAndTimeUTC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...