5

列名を選択したいのですが、事前にテーブル構造がわからず、変更される可能性があるため、選択ステートメントを列名でハードコーディングすることはできません。また、すべての列を選択したくありません。これを行う簡単な方法はありますか?

私の考えでは、これら 2 つのクエリの何らかの組み合わせですが、私の SQL はそれほど良くありません。

SHOW COLUMNS FROM table_name;
SELECT * FROM table_name; 

サブセレクトを使用してみましたが、うまくいきませんでした。何も起こらないようです。エラーは発生しません。結果が得られません。

SELECT (SELECT column_name 
        FROM information_schema.columns 
        WHERE table_name ='table_name') 
FROM table_name;

多分私は参加する必要がありますか?..とにかく、どんな助けでも素晴らしいでしょう、ありがとう

4

1 に答える 1

2

このSQLFiddle を試してください:

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;

いくつかの問題:

結果セットにある種の ORDER BY が必要になる可能性があります。

ジョインなどでできることは限られています。

テストで見逃される可能性が高いランタイムに検証を移動します。

スキーマの変更を簡単に処理できることを望んでいます。この手法は、予測できる特定のタイプのスキーマ変更のみを処理し、それ以外はおそらくこのコードを変更する必要があります。

于 2013-03-20T19:09:53.000 に答える