/ / GROUP_CONCAT Błąd instrukcji mysql - mysql, sql, concat, group-concat

GROUP_CONCAT komunikat o błędzie mysql - mysql, sql, concat, group-concat

Próbowałem ststement mysql dla dynamicznie wiersze do kolumny przez następuje tutaj z instrukcją zapytania:

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
"MAX(CASE WHEN col = """,
col,
""" THEN val END) as `",
col, "`"
)
)INTO @sql
FROM
(
SELECT A.id_a, D.id_c id_c,
C.students students,
CONCAT(B.`code`, "_", A.id_a) col,
CONCAT(D.value_m, ",", D.value_n) val
FROM table_a A
INNER JOIN table_d D ON A.id_a =D.id_a
INNER JOIN table_b B ON D.id_b=B.id_b
INNER JOIN table_c C ON D.id_c=C.id_c
)dd;

SET @sql = CONCAT("SELECT id_c, students,", @sql, "
FROM(
SELECT A.id_a, D.id_c id_c,
C.students students,
CONCAT(B.`code`, "_", A.id_a) col,
CONCAT(D.value_m, ",", D.value_n) val
FROM table_a A
INNER JOIN table_d D ON A.id_a =D.id_a
INNER JOIN table_b B ON D.id_b=B.id_b
INNER JOIN table_c C ON D.id_c=C.id_c
)dd
GROUP BY id_c"
);

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

z komunikatem o wyniku:

Query OK, 0 rows affected
Query OK, 1 row affected
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 "", A.id_a) col,
CONCAT(D.value_m, ",", D.value_n) val
FROM table_a A    " at line 1
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 "MAX(CASE WHEN col = "MAT_1" THEN val END) as `MAT_1`,MAX(CASE WHEN col = "BIO_1"" at line 1
1243 - Unknown prepared statement handler (stmt) given to EXECUTE
1243 - Unknown prepared statement handler (stmt) given to DEALLOCATE PREPARE

Nie znam takiej instrukcji SQL i tego, co jest nie tak z tym zapytaniem SQL

Dzięki...

Odpowiedzi:

1 dla odpowiedzi № 1

Jeśli spojrzysz na swój kod (i powiększysz):

SET @sql = CONCAT("SELECT id_c, students,", @sql, "
[..]
CONCAT(B.`code`, "_", A.id_a) col,
CONCAT(D.value_m, ",", D.value_n) val
[..]
GROUP BY id_c"
);

zobaczysz to _ i , są czarne, podczas gdy powinny być czerwone jako część sznurka. To znaczy, że twój łańcuch tam jest „zepsuty”. Więc musisz uciec przed pojedynczymi cudzysłowami za pomocą "":

SET @sql = CONCAT("SELECT id_c, students,", @sql, "
[..]
CONCAT(B.`code`, ""_"", A.id_a) col,
CONCAT(D.value_m, "","", D.value_n) val
[..]
GROUP BY id_c"
);

Lub użyj podwójnych cudzysłowów dla ciągów zawierających pojedyncze cudzysłowy:

SET @sql = CONCAT("SELECT id_c, students,", @sql, "
[..]
CONCAT(B.`code`, "_", A.id_a) col,
CONCAT(D.value_m, ",", D.value_n) val
[..]
GROUP BY id_c"
);

Teraz cały ciąg jest czerwony tak, jak powinien :-)

http://rextester.com/SLMU41976