2010-12-29 8 views
2

私は私のタイトルがあまり説明的ではないことを知っています...ここで詳細を説明しましょう。SQLでは、SELECT * FROM ...の結果をどのように除外しますか?

たとえば、表に26のフィールドがあるとします。例えばfield_a ... field_z。私は選択されたクエリが私に15フィールドだけを返すようにしたい。

通常、私はSELECT field_a、field_b ... field_o FROM myTableを実行します。

これは面倒です。 SELECT *を実行して特定のフィールドを返さないように指示する方法がMYSQLにありますか?

SELECT * exclude(field_p、field_q .. field_z)のようなsoemthingからmyTable?


ありがとうございました。 :)

+3

タイプに触れる方法を学び、一度入力するだけでうまくいけば何かを怠けてはいけません。 –

答えて

2
delimiter // 
DROP PROCEDURE IF EXISTS `getColumnNames`// 
CREATE PROCEDURE `getColumnNames` (db_name CHAR(255), t_name CHAR(255), ex_name CHAR(255)) 
BEGIN 
SELECT group_concat(column_name) FROM `information_schema`.`COLUMNS` C 
WHERE 
table_schema = db_name 
AND 
table_name = t_name 
AND 
column_name not in (ex_name) 
GROUP BY table_schema,table_name; 
END 

// 
delimiter ; 


call getColumnNames("Db_name", "tbl_name", "col_to_exclude"); 
1

必要なフィールドを使用しないでください(すべてのフィールドを必要とする場合でも、* select * shouoldはプロダクションコードには表示されません)。私はmySQLについてはわかりませんが、SQL Serverでは簡単に指定できる列をドラッグ&ドロップできますが、これをドラッグアンドドロップすることであまり退屈にする方法はありますか?

0

私はこれを行う方法がないことを願っています。 1つでもある場合でも、私はそれを使用しないことをお勧めします。

解決策は、除外する1行を除外するビューを作成し、*ビューから選択することです。

4

SELECT * is evil.

あなたは、生産のコードでそれを使用しないでください。

あなたはいつものように、返して欲しい列を指定する必要があります。

いつものように
SELECT `column1`, `column2`, `someothercolumn` 
FROM `myTable` 

the documentationは核心を支援することができます!

1

「SELECT *」は本番環境では悪い考えであるため、これを行う方法はありません。除外されたフィールドがテーブルに存在しない場合はどうしたらよいでしょうか?これでエラーが発生しますか?警告?

実際にすべてのフィールドを列挙するのは面倒ですが、正しい方法です。これは、あなたのコード(少し詳しく)を自己文書化し、サイクルの早い段階でエラーを止めるのに役立ちます。一例として、何らかの理由で 'user_name'の名前が 'username'に変更された場合、SQL文は失敗し、トレースされるのを待っているコード内で奇妙なデータが拾われることはありません。

+0

これらの引数は、ちょっと偽のIMOです。場合によっては、「列X以外のすべての列を選択したい」と言うことができるようになると、実際にはもっと自己文書化されることがあります。私の必要性は、同じテーブルから 'Insert .. Select'を実行する管理スクリプトを実行するときに最も頻繁に発生します。私はこのサイトのどこかで[言語D](http://en.wikipedia.org/wiki/D_%28data_language_specification%29)がこれを実装していると思う。 –

3

SQL自体は、あなたが求めている機能をサポートしていません。 (そうした場合は、select *と同じ問題が発生します。マウス選択(describe my_table

  • コピーフィールド]列のデータを実行し

    1. 火災アップのmysqlコマンドラインクライアント
    2. :これは私が、私はMySQLを使用していたときに何をすべきかです

      )の他のコメントを参照してください。 )

    3. 私のエディタに貼り付け
    4. データ(TextPadの)
    5. 手動で私は
    6. マクロを実行suコマンドを必要としない列を削除新しい行をカンマで区切ります(そしてテーブルエイリアスを挿入します)。

    すべての場合、列の数に関係なく選択リストを作成するのに約20-30秒かかります。この方法は、私が間違って列を忘れたり忘れたりしないようにします。

  • 関連する問題