0
我有一個存儲過程,它執行的操作是select
。真正的情況要複雜得多,但假設我設法使用CONCAT
來創建動態查詢,所以我最終得到了一個有效的查詢字符串,該字符串被準備好執行。這個例子說明吧:使用CONCAT生成的字符串在存儲過程中使用CONCAT_WS()將兩列合併爲一列
DELIMITER ;;
DROP PROCEDURE IF EXISTS tmp;;
CREATE PROCEDURE tmp()
BEGIN
SET @sql = '';
SET @sql = CONCAT('SELECT
ib.visit_id,
ib.visit_child
FROM
infoBase ib
GROUP BY
visit_id, visit_child');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;;
DELIMITER ;
我得到預期的結果沒有問題:
╔══════════╦═════════════╗
║ visit_id ║ visit_child ║
╠══════════╬═════════════╣
║ 121340 ║ 104280 ║
║ 121341 ║ 114447 ║
║ 121485 ║ 114190 ║
╚══════════╩═════════════╝
現在,我想有一個與其他兩個這樣的連接值第三列:
╔══════════╦═════════════╦══════════════╗
║ visit_id ║ visit_child ║ combined ║
╠══════════╬═════════════╬══════════════╣
║ 121340 ║ 104280 ║ 121340104280 ║
║ 121341 ║ 114447 ║ 121341114447 ║
║ 121485 ║ 114190 ║ 121485114190 ║
╚══════════╩═════════════╩══════════════╝
我添加CONCAT_WS
做到這一點:
DELIMITER ;;
DROP PROCEDURE IF EXISTS tmp;;
CREATE PROCEDURE tmp()
BEGIN
SET @sql = '';
SET @sql = CONCAT('SELECT
ib.visit_id,
ib.visit_child,
CONCAT_WS('', ib.visit_id, ib.visit_child) AS combined
FROM
infoBase ib
GROUP BY
visit_id, visit_child');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;;
DELIMITER ;
但我得到了一個Error Code: 1064
,如果我嘗試這樣做時,我call myDB.tmp();
如果我跑我SELECT
聲明,因爲它上面顯示沒有存儲過程,它正是我需要的,所以我敢肯定這個問題依賴在嵌套CONCAT(CONCAT_WS())
,但我不知道如何得到我所需要的。
這似乎很容易!讓我看看你的知識人! 在此先感謝!
SO BASIC = /我感到慚愧u.u我只是沒有注意到!我覺得現在很noob現在哈哈http://cdn.memegenerator.net/instances/400x/36108870.jpg謝謝! – Metafaniel