1

このクエリがあります。実行すると Query ステートメントを取得しましたが、このクエリの結果セットが必要です。

私のクエリは次のとおりです。

SELECT CONCAT('select * from ', table_name, ' union all ') AS CUSTOMQUERY
FROM   information_schema.tables
WHERE  table_name LIKE '%custom%'

私はこの結果を得る

select * from custom_70006 union all  
select * from custom_704306 union all  
select * from custom_700436 union all  
select * from custom_7000643 union all  
select * from custom_7000634 union all  
select * from custom_700046 union all  
select * from custom_700063 union all  
select * from custom_700062 union all 

しかし、対応するデータを含むこの特定の列の結果セットが必要で、最後にunion all削除する必要があります。

関連するクエリで私を助けてください。

4

1 に答える 1

1

これがあなたが探しているものだと思います:

SET GLOBAL group_concat_max_len = 4294967295;

SELECT @query1 := GROUP_CONCAT(CONCAT('SELECT * FROM ', table_name) SEPARATOR
                         ' UNION ALL ') AS CUSTOMQUERY
FROM   INFORMATION_SCHEMA.tables
WHERE  TABLE_SCHEMA = SCHEMA()
       AND table_name LIKE '%custom%';


PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt;

例: SQLフィドル

またはクエリを次のように変更します。

SELECT @query1 := CONCAT('select * from ', table_name, ' union all ') AS
       CUSTOMQUERY
FROM   information_schema.tables
WHERE  table_name LIKE '%custom%'

'union all'クエリから最後の文字列を削除するには:

SET @query1 = TRIM(TRAILING 'union all' FROM TRIM(@query1));

PS: group_concat_max_lenのデフォルト値は1024 のみです。したがって、より高い値に設定する必要があります。そうしないと、クエリの出力が削除され、構文エラーが発生する可能性があります。

于 2012-08-30T05:44:39.670 に答える