我想选择类型为“text”的列的值。类似的东西:
SELECT (SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'mytable' AND COLUMN_TYPE='text') FROM `mytable`
有可能吗?我经常搜索但没有发现任何东西,对此我有点悲观。
[当然上面的陈述中的问题是第二个SELECT返回多行]
#1242 - Subquery returns more than 1 row
答案 0 :(得分:1)
除了常规查询之外,你需要在这里使用很多语句,而不是提到你需要从Information.Schema
获取列。您可以使用GROUP_CONCAT()函数和PREPARE and EXECUTE语句。
它可能看起来像这样:
SET @col = NULL;
SET @query = NULL;
SELECT (
SELECT GROUP_CONCAT(COLUMN_NAME) as ColumnNames
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_name'
AND data_type='text' )
INTO @col;
SET @query = CONCAT('SELECT ', @col, ' FROM table_name');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
查看我的 Sql Fiddle Demo 。
答案 1 :(得分:0)
试试这个,
SELECT COLUMN_NAME, COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'application_config' AND COLUMN_TYPE='varchar(150)';
注意:您必须提及确切类型(EX:int(10),时间戳),否则请使用('%varchar%')。