私は周りを見回しましたが、私のニーズを満たす解決策を見つけることができないようですので、あなたが助けてくれることを願っています。(私はMySQLに少し慣れていませんが、SQL ServerとOracleの経験が豊富です。)
いくつかのテーブルを持つデータベースがあります。
最初のテーブルは、基本情報を格納する定義テーブルであり、cp_defと呼ばれます。
cid (pkey) status
-------------------
10001 0
10002 1
次に、cp_defテーブルのレコードごとに、対応するcp_ [cid]テーブルがあります([cid]はcp_defテーブルのcid値です)。例:
table: cp_10001
id(pkey) code date_issued date_expired
-------------------------------------------------
1 ABC123 2011-06-23 2011-06-30
2 CYG124 2011-06-23 2011-06-30
table: cp_10002
id(pkey) code date_issued date_expired
-------------------------------------------------
1 CAC126 2011-06-23 2011-06-30
2 VGC254 2011-06-23 2011-06-30
すべてのcp_[cid]テーブルのすべてのレコードのコードとdate_expired列の値を出力するために(シェルスクリプトとcronジョブの一部として)動的クエリを毎日実行する必要があります。ここで、date_issued値は前日の日付です。
クエリが機能しています(以下を参照)。ただし、新しいcp_ [CID]テーブルを追加するたびに、クエリの最後に別のUNIONALLステートメントを手動で追加する必要があります。
SELECT code, date_expired
FROM mydatabase.cp_10001
WHERE DATE(date_issued) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
UNION ALL
SELECT code, date_expired
FROM mydatabase.cp_10002
WHERE DATE(date_issued) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
私の最終的な目標は、実行時に上記のクエリをプログラムで生成することです。これにより、新しいcp_ [CID]テーブルがデータベースに追加されるたびに、手動で介入する必要がなくなります。
ビューを使ってみました。ただし、テーブルを追加するには、新しいテーブルを考慮して、ビューを手動で変更する必要があるように見えました。
各cp_[CID]テーブルがcp_defテーブル(およびINFORMATION_SCHEMAテーブル)にリストされていることを考えると、動的クエリを構築するために何らかのループを実行できると考えていましたが、それを完全には理解していません。これを短くするために、動的クエリを作成するためにcp_defテーブルをループする試みの失敗を投稿しないようにします。
そのようなクエリを作成するための正しい方向に私を向けるためにあなたが提供できるどんな援助も大いにありがたいです。何か見落としていた場合は、お詫び申し上げます。私は、探しているものをさまざまなフレーズで正確に検索しようとしましたが、役に立ちませんでした。