2017-01-18 2 views
1

私は1つを除いてすべての列を選択しようとしているので、私はこれを使用しています:使用information_schema.COLUMNS

select COLUMN_NAME 
from information_schema.COLUMNS 
where TABLE_NAME='report' and COLUMN_NAME != 'date'; 

それは私に正しい結果を返しますが、私は使用してそれを適用しようとすると、 :

select 
(
select COLUMN_NAME 
from information_schema.COLUMNS 
where TABLE_NAME='report' and COLUMN_NAME != 'date' 
) 
from report limit 1; 

それは私がそれをGROUP_CONCATしようとしたが、それだけの列(クエリ)を返しERROR 1242 (21000): Subquery returns more than 1 row

の誤差を与えます

select 
(
select group_concat(COLUMN_NAME) 
from information_schema.COLUMNS 
where TABLE_NAME='report' and COLUMN_NAME != 'date' 
) 
from risk_assessment.report limit 1; 

| (select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME='report' and COLUMN_NAME != 'date')               | 
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| id,ref,creator,status,username,title,site,location,comment,id,status,type,chemical_name,description,title,creator,frequency,location,form,storage,comments,comments_tick,username | 

変更する必要はありますか?

答えて

0

MariaDBの構文はありません。 1つのステートメントでは、(テーブルからxを除いて選択する)ようなことはできません。

しかし、あなたはいくつかのステップを経てそれを行うことができます。

SET @sql = 
    CONCAT('SELECT ', 
      (SELECT 
        GROUP_CONCAT(COLUMN_NAME) 
       FROM 
        INFORMATION_SCHEMA.COLUMNS 
       WHERE 
        TABLE_SCHEMA = '<schema>' 
        AND TABLE_NAME = '<table>' 
         AND COLUMN_NAME NOT IN ('<column>')), 
      ' FROM <table>'); 
PREPARE s FROM @sql; 
EXECUTE s; 
関連する問題