2013-04-02 44 views
-1

我需要从表“票”中选择除列“depname”之外的所有列 以下预备语句不能按预期工作。选择除一个以外的所有列

PREPARE stmt1 FROM 'SELECT ? from magon.ticket limit 2'; 

select GROUP_CONCAT(COLUMN_NAME) into @clm from COLUMNS where TABLE_SCHEMA = 'magon' and TABLE_NAME = 'ticket' and COLUMN_NAME NOT IN ('depname') GROUP BY TABLE_SCHEMA, TABLE_NAME; 

execute stmt1 using @clm; 

它返回列列表两次(由于限制2)但不是实际数据。

回答

5

不幸的是,您不能参数化列名以及表名,因为它们是标识符。但是你可以在字符串中串联的值,

SET @colName = (SELECT GROUP_CONCAT(COLUMN_NAME) 
       FROM COLUMNS 
       WHERE TABLE_SCHEMA = 'magon' AND 
         TABLE_NAME = 'ticket' AND 
         COLUMN_NAME NOT IN ('depname') 
       GROUP BY TABLE_SCHEMA, TABLE_NAME); 
PREPARE stmt1 FROM CONCAT('SELECT ', @colName ,' FROM magon.ticket LIMIT 2'); 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1; 
相关问题