ホームページ > データベース > mysql チュートリアル > 情報スキーマを使用して MySQL で列を動的に選択する方法

情報スキーマを使用して MySQL で列を動的に選択する方法

Susan Sarandon
リリース: 2024-12-22 06:58:27
オリジナル
938 人が閲覧しました

How to Dynamically Select Columns in MySQL Using Information Schema?

MySQL での動的な列の選択

MySQL では、未知のテーブル構造または予想されるテーブル構造に基づいて特定の列を取得する必要があるシナリオが発生する場合があります。スキーマが変更されます。これは、SQL ステートメント内の列名をハードコーディングすることが非現実的である場合に問題を引き起こします。この記事では、すべての列を選択することなく、この問題の解決策を検討します。

情報スキーマの利用

information_schema データベースには、MySQL サーバー上のすべてのデータベースとテーブルに関するメタデータが含まれています。これには、列の名前、データ型、テーブルのメンバーシップなどの列に関する情報が保存される COLUMNS というテーブルが含まれています。

動的クエリの構築

列を動的に選択するには名前を使用するには、MySQL 関数と information_schema.COLUMNS テーブルを組み合わせて使用​​できます。以下に段階的なアプローチを示します。

  1. 条件付きステートメント (例: 特定の列プレフィックスのフィルタリング) を使用して、information_schema.COLUMNS から目的の列名を抽出します。
  2. 選択した列名を SELECT の一部として使用できる文字列に変換します。ステートメント。
  3. 連結された文字列を変数に配置し、EXECUTE で実行することで準備済みステートメントを作成します。

SQL ステートメントの例

次の SQL ステートメントは、テーブルから「prefix」で始まる列名を動的に選択する方法を示しています。 "atable":

CREATE TABLE atable (
  prefix1 VARCHAR(10),
  prefix2 VARCHAR(10),
  notprefix3 INT,
  notprefix4 INT
);

INSERT INTO atable VALUES ('qwer qwer', 'qwerqwer', 1, 1);
INSERT INTO atable VALUES ('qwer qwer', 'asdfaasd', 1, 1);
INSERT INTO atable VALUES ('qwer qwer', 'qrt vbb', 1, 1);
INSERT INTO atable VALUES ('qwer qwer', 'sdfg sdg', 1, 1);

SELECT CONCAT('SELECT ', GROUP_CONCAT(c.COLUMN_NAME), ' FROM atable;')
INTO @query
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'atable'
  AND c.COLUMN_NAME LIKE 'prefix%'
ORDER BY c.ORDINAL_POSITION;

PREPARE stmt FROM @query;

EXECUTE stmt;
ログイン後にコピー

出力:

このステートメントの出力は、次の SQL ステートメントを含む単一行になります:

SELECT prefix1, prefix2 FROM atable;
ログイン後にコピー

このステートメントを実行すると、「atable」から列「prefix1」と「prefix2」のみが取得されます。テーブル。

以上が情報スキーマを使用して MySQL で列を動的に選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート