Mysql выдает ошибку при выполнении кода - PullRequest
0 голосов
/ 29 августа 2018

Это мой sql код:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'COALESCE(MAX(CASE WHEN delc = ''',
      delc,
      ''' then ''y'' end),''n'') AS ',
      delc
    )
  ) INTO @sql
FROM inputr;

SET @sql = CONCAT('SELECT tem, ', @sql, ' 
                  FROM inputr 
                  GROUP BY tem');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Когда я выполняю это в mysql workbench 6.3, я получаю error code 1064

В чем проблема? Это ошибка:

PREPARE stmt FROM @sql  Error Code: 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 'plan,COALESCE(MAX(CASE WHEN delc = 'sil' then 'y' end),'n') AS sil,COALE' at line 1    0.000 sec

1 Ответ

0 голосов
/ 29 августа 2018

Ваша проблема связана со структурой окончательного запроса. Я предполагаю, что одно или несколько значений delc имеют одинарные кавычки или обратную косую черту.

Самое простое решение - просто устранить их, принимая только "нормальные" имена

select . . .
from inputstr
where delc regexp '^[a-zA-Z0-9_]+$'

Эти символы допускаются как идентификаторы и как строки, поэтому код должен работать.

...