テーブルから上位 N 行を選択することは可能ですが、MySQL データベース テーブルから最初の N 列を選択する方法はありますか?
返信ありがとうございます。PHP のコードの一部かもしれません。
3 に答える
SQL では、必要な列に名前を付けるか、*
ワイルドカードを使用する必要があります。
リレーショナル理論では、列には暗黙的な順序がないため、「最初の N 列」という概念はありません。もちろん、SQL の具体的な実装では、何らかの格納順序が必要ですが、SQL 言語では、テーブル内の「位置」による列のフェッチはサポートされておらず、列のシーケンスのフェッチもサポートされていません ( *
)。
最初に Bill Karwin の回答をご覧ください。ただし、列名を並べ替える方法を知っている場合は、動的クエリを利用するソリューションがある可能性があります。
テーブルからすべての列名を選択するには、次のようなクエリを使用できます。
SELECT `column_name`
FROM `information_schema`.`columns`
WHERE `table_schema`=DATABASE()
AND `table_name`='yourtablename';
(この回答をご覧ください)。そしてGROUP_CONCATを利用する:
GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name)
コンマで区切られた単一の行ですべての列名を返すことができます。
`col1`, `col2`, `col3`, ...
(また、列の名前を引用符で囲みました。列のリストを何らかの方法で順序付けする必要があることに注意してください。そうしないと、列名が返される順序について保証されません)。
次に、たとえば最初の 2 つの列名を取得するために、SUBSTRING_INDEXを使用して、返された文字列を切り取ることができます。
SUBSTRING_INDEX(columns, ',', 2)
'SELECT '
、上で選択した列、およびを連結し、結果の文字列を変数' FROM Tab1'
に挿入する最後のクエリは次のとおりです。@sql
SELECT
CONCAT(
'SELECT ',
SUBSTRING_INDEX(
GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name),
',',
2),
' FROM Tab1'
)
FROM
information_schema.columns
WHERE
table_schema=DATABASE()
AND table_name='Tab1'
INTO @sql;
その値は次のようになります。
@sql = "SELECT `col1`, `col2` FROM Tab1"
その後、ステートメントを準備して実行できます。
PREPARE stmt FROM @sql;
EXECUTE stmt;
ここでフィドルを参照してください。