Код ошибки: 1064. У вас ошибка в синтаксисе SQL - STRING_SPLIT - PullRequest
0 голосов
/ 22 ноября 2018
SELECT er.pNumber, er.name, ep.fPosition, eo.res
FROM events_shot er, events_shot_final ep, events_shot_final_res eo, events_gear era
WHERE era.idShot=er.idShot AND ep.idPhoto=era.idPhoto AND eo.idShot=era.idShot
    AND era.idShot=42 AND eo.shotType='PRT'
    AND er.pNumber IN (
        SELECT *
        FROM STRING_SPLIT(eo.photosId,'-')
        )

shotsId - это строка типа 12-1-8-7 ... с n pNumber id, разделенным '-'

К сожалению,запрос вернет эту ошибку:

Код ошибки: 1064. У вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '(eo.photosId,' - '))' в строке 7

. Любая помощь, которую вы можете предоставить, будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

У вас плохая структура базы данных, eo.photosId должна быть отдельной таблицей.

Но у вас есть крайне неоптимальное решение без изменения структуры БД:

AND concat('%-', er.pNumber,'-%') LIKE concat('-', eo.photosId, '-')

, вы должны изменить12-1-8-7 до -12-1-8-7- и найдите идентификатор с разделителем -1- + % - КАК любой оператор char

0 голосов
/ 22 ноября 2018

Попробуйте сопоставить, используя регулярное выражение вместо разделения строки, замените код, который выдает ошибку, на

AND REGEXP_INSTR(eo.photosId, CONCAT('-?', er.pNumber, '-?')) > 0

Обновление

Вместо попыткиmatch dash-number-dash нижеприведенное регулярное выражение соответствует не number-number-not number, чтобы соответствовать только точному указанному числу

AND REGEXP_INSTR(eo.photosId, CONCAT('(^|[^0-9])', er.pNumber, '([^0-9]|$)')) > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...