Запустите MySQL Query, если условие истинно, иначе выполните другой запрос - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно разделить адресный столбец на streetName и streetNumber.Иногда проблема заключается в том, что полный адрес находится в столбце streetName, а иногда и в столбце streetNumber.Я использую этот код для разделения replace(streetName, substring_index(streetName, ' ', -1), '') as street,substring_index(streetName, ' ', -1) as number

и replace(streetNumber, substring_index(streetNumber, ' ', -1), '') as street,substring_index(streetNumber, ' ', -1) as number.

Что я хочу сделать, это запустить этот раздел моего оператора запроса select, если streetName равно нулю или пусто, выполнить командукод с номером улицы и наоборот.

У меня есть разделы ifStreet () и IfStreetNumber () в хранимой процедуре.Но я получаю сообщение об ошибке, когда запускаю его, и если я помещаю код непосредственно в операторы case, он не работает так же хорошо. Я получаю сообщение об ошибке, в вашем синтаксисе SQL есть ошибка.Можно ли выполнить запрос на основе условия или что не так с моим подходом?Спасибо,

  SELECT 
    firstName,
    lastName,
    D.email AS email,
    streetName,
    streetNumber,
    zipCode,
    city,
    IF(length(zipCode) =5,'Germany','') As country,
    registeredOn,
    N.email AS matchedEmail,
     CASE
        WHEN gender = 'Frau' OR gender = 'f' THEN 'f'
        WHEN gender = 'Herr' OR gender = 'm' THEN 'm'
        ELSE ''
    END AS Title,
    CASE
        WHEN gender = 'Frau' OR gender = 'f' THEN 'Frau'
        WHEN gender = 'Herr' OR gender = 'm' THEN 'Herr'
        ELSE ''
    END AS Salutation,
    CASE
        WHEN streetName !='' THEN 
          call ifStreet()
    ELSE 
           call ifStreetNumber()
    END

FROM
    matchFiles.TableA AS D
        INNER JOIN
    matchFiles.TableB AS N ON D.email = N.email
WHERE
    registeredOn <= '2018-08-31';

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Я реструктурировал запрос, а также удалил с помощью хранимой процедуры.Я использовал функцию IFNULL, чтобы сделать чередование, чтобы использовать либо streetName, либо streetNumber, в зависимости от того, какой столбец имеет строку полного адреса.

replace(IFNULL(streetName,streetNumber), substring_index(IFNULL(streetName,streetNumber), ' ', -1), '') as street,substring_index(IFNULL(streetName,streetNumber), ' ', -1) as number
0 голосов
/ 04 апреля 2019

Хранимые процедуры не допускаются в инструкциях SELECT. Таким образом, ваш подход не будет работать.

Попробуйте перевести вашу логику из хранимой процедуры в адекватный подзапрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...