2017-01-17 9 views
-1

私は400以上のテーブルを持ち、それぞれにカラムタイムスタンプがあります。これらの各テーブルのタイムスタンプの最初の行/レコードを取得したいと思います。 400以上のクエリを実行したくない場合は、これを実行する最善の方法は何ですか?複数のテーブルから1つのレコードを選択してください

+2

この種の問題は、デザインが邪魔になることがあります。 – Strawberry

答えて

0

あなたはこのようなUNIONクエリを実行することができます

SELECT Id, yourColumn, timestamp FROM Table001 ORDER BY timestamp DESC LIMIT 1 
UNION ALL 
SELECT Id, yourColumn, timestamp FROM Table002 ORDER BY timestamp DESC LIMIT 1 
UNION ALL 
SELECT Id, yourColumn, timestamp FROM Table003 ORDER BY timestamp DESC LIMIT 1 
ORDER BY timestamp 

はこの文を作成するために、ループを使用します。

SET @resultQuery = NULL; 
SELECT 
    GROUP_CONCAT(
    DISTINCT 
    CONCAT('SELECT * FROM ', table_name, ' ORDER BY timestamp DESC LIMIT 1 ') 
    SEPARATOR '\r\nUNION\r\n' 
) 
INTO 
    @resultQuery 
FROM 
    information_schema.COLUMNS 
WHERE 
    table_schema = '???' AND column_name LIKE '%timestamp'; 

SELECT @resultQuery; 
+0

私は特定のタイムスタンプを選択するのではなく、各テーブルの最初のレコードと列タイムスタンプの対応する値を選択します –

+0

ORDER BYタイムスタンプDESCまたはASC(各テーブル)とLIMIT 1 – cSteusloff

+0

GROUP BYのないGROUP_CONCAT関数does not make感覚.. –

0

400の+テーブルから最初のレコードの必要性が悪いようなにおいがします同じスキーマを使用している場合は、UNION ALL

SELECT * FROM foo ORDER BY timestamp ASC LIMIT 1 
UNION ALL 
SELECT * FROM bar ORDER BY timestamp ASC LIMIT 1 
UNION ALL 
SELECT * FROM baz ORDER BY timestamp ASC LIMIT 1 
-- etc... 
+0

これは、DBが設計されていないので、貧しいデザインかどうかはわかりませんが、私は驚かないでしょう。だから私は800 +長いクエリを作成する必要がありますか? –

関連する問題