MySQL - 关于临时表列名称的GROUP_CONCAT()?

时间:2014-08-22 04:04:04

标签: mysql sql coldfusion temporary

我找不到完成此操作的语法。我创建了几个临时表,并且我想将列名解析为标准列表,以便在我的应用程序的其他地方使用。

SELECT COLUMN_NAMES FROM INFORMATION_SCHEMA... 

似乎不适用于临时表。但是:

SHOW COLUMNS FROM TEMP_TBL

会返回有效的查询。但我想它在子查询中使用是不兼容的。基本上我想要的是这样的事情。

SELECT GROUP_CONCAT(FIELD) FROM
(
    SHOW COLUMNS FROM TEMP_OB
);

由于SHOW COLUMNS返回一个查询,我认为可以子查询一个SHOW COLUMNS语句,但事实并非如此。有没有人知道一种查询和分组临时表中字段属性以用作常规查询的方法?我想要ColdFusion商店&在查询临时表时,在其他上下文中评估这些变量。

1 个答案:

答案 0 :(得分:3)

这一切都取决于你想要达到的目标。正如您已经看到的那样,您不能将SHOW用作子查询。值得庆幸的是,还有其他方法可以获得该列表。首先,这里有一些cfscript,我把它们放在一起创建一个临时表并用一些虚拟数据填充它。

<cfscript>
    datasource = 'foobar';
    qry = new Query(datasource=datasource);
    // Make sure the temporary table isn't there first
    qry.execute(sql='DROP TEMPORARY TABLE IF EXISTS foo');
    // Create it
    qry.execute(sql='CREATE TEMPORARY TABLE foo (col1 INT,col2 INT,col3 INT,col4 INT)');
    // Insert some data
    qry.execute(sql='INSERT INTO foo VALUES (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4),(5,5,5,5)');
</cfscript>

接下来,您可以再进行一些查询以获取您要查找的列列表

<cfscript>    
    // Select the data and use prefix to get column list
    qr = qry.execute(sql='SELECT * FROM foo');
    writedump(qr.getPrefix().columnlist);

    // Also get the columns from SHOW COLUMNS using valuelist
    colqr = qry.execute(sql='SHOW COLUMNS FROM foo');
    writedump(ValueList(colqr.getResult().field));
</cfscript>

这当然也可以在cfml中实现,我只是喜欢cfscript。

<!--- SELECT method to get column names --->
<cfquery name="qr" datasource="#datasource#">
    SELECT * FROM foo
</cfquery>
<cfdump var="#qr.columnlist#">

<!--- SHOW COLUMNS method to get column names --->
<cfquery name="colqr" datasource="#datasource#">
    SHOW COLUMNS FROM foo
</cfquery>
<cfdump var="#ValueList(colqr.field)#">

因此,虽然上述其中一项有望与您当前的逻辑相符,但您可能会以更好的方式完成您最终实现的目标,但希望这可以为您指明方向。