I have the following working MYSQL Query (it makes a pivot join over two tables):
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(sk.keywords = ''', sk.keywords,''', kr.rank, NULL)) AS ', CONCAT('`',sk.keywords, '`')
)
) INTO @sql
FROM
search_keywords sk
WHERE sk.product_id = 2 AND sk.active = 'Y';
SET @sql = CONCAT('SELECT eval_date, ', @sql, '
FROM keyword_ranking AS kr
LEFT JOIN search_keywords AS sk
ON kr.search_keywords_id = sk.id
GROUP BY eval_date');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
This query I want to insert into a java prepared statement. If I just copy it, I 'll get a misform sql syntax error:
st = connection.prepareStatement(
"SET @sql = NULL; "
+ "SELECT "
+ "GROUP_CONCAT(DISTINCT "
+ "CONCAT("
+ "'MAX(IF(sk.keywords = ''', sk.keywords,''', kr.rank, NULL)) AS ', CONCAT('`',sk.keywords, '`')"
+ ") INTO @sql "
+ "FROM search_keywords sk "
+ "WHERE sk.product_id = ? AND sk.active = ?; "
+ "SET @sql = CONCAT('SELECT eval_date, ', @sql, ' "
+ "FROM keyword_ranking AS kr "
+ "LEFT JOIN search_keywords AS sk "
+ "ON kr.search_keywords_id = sk.id "
+ "GROUP BY eval_date'); "
+ "PREPARE stmt FROM @sql; "
+ "EXECUTE stmt; "
+ "DEALLOCATE PREPARE stmt; "
);
Error:
Error com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(sk.keywords = CONCAT(''', sk.keyword' at line 1