#mysql #mysql-python
#mysql #mysql-python
Вопрос:
Я не могу понять, что не так со следующим запросом:
SELECT t_sh.source_file_id,
t_sh.id,
MAX(t_sh.master_event_id),
IF(t_sh.content REGEXP '[;}[:space:]]break;', 'true', 'false') AS break,
IF(t_sh.content REGEXP '[;}[:space:]]break ', 'true', 'false') AS break_label,
IF(t_sh.content REGEXP '[;}[:space:]]continue;', 'true', 'false') AS continue,
IF(t_sh.content REGEXP '[;}[:space:]]throw ', 'true', 'false') AS throw,
IF(t_sh.content REGEXP '[;}[:space:]]return;', 'true', 'false') AS void_return
FROM source_histories AS t_sh,
( SELECT DISTINCT source_file_id
FROM source_histories
WHERE content <> NULL
AND content REGEXP '[;}[:space:]]break;|[;}[:space:]]break |[;}[:space:]]continue;|[;}[:space:]]throw |[;}[:space:]]return;'
) AS t_uniqueSFI
WHERE t_sh.source_file_id = t_uniqueSFI.source_file_id;
При запуске с MySQLdb python выдает следующую ошибку:
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right
syntax to use near
'continue,ntttttttIF(t_sh.content REGEXP '[;}[:space:]]throw ', 'true', 'false') ' at line 6")
Я новичок в SQL, и ваша помощь очень ценится.
Ответ №1:
Проблемная строка
IF(t_sh.content REGEXP '[;}[:space:]]continue;', 'true', 'false') as continue
continue — это зарезервированное слово, и вам нужно вернуть что-то как
IF(t_sh.content REGEXP '[;}[:space:]]continue;', 'true', 'false') as `continue`
Вот что происходит в mysql, когда ваш запрос приходит к этой строке
mysql> select IF(uname REGEXP '[;}[:space:]]continue;', 'true', 'false')
AS continue from test ;
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for
the right syntax to use near 'continue from test' at line 1
Теперь, если я использую обратную ссылку в своей тестовой таблице, я получаю
mysql> select IF(uname REGEXP '[;}[:space:]]continue;', 'true', 'false')
AS `continue` from test ;
----------
| continue |
----------
| false |
| false |
| false |
| false |
| false |
| false |
| false |
----------
Комментарии:
1. Большое вам спасибо! Я должен был знать, чтобы посмотреть на зарезервированные слова.