sql >> データベース >  >> RDS >> Mysql

MySQLのテーブルから*を選択し、特定の列を省略するにはどうすればよいですか?

    多くの人が、返されるすべての列を明示的にリストすることがベストプラクティスであると言いますが、時間を節約し、結果から特定の列を省略したい場合があります(テストなど)。以下に、この問題を解決する2つのオプションを示します。

    1。関数を作成する 必要なすべての列名を取得します:(この関数を保持する関数と呼ばれるスキーマを作成しました)

    DELIMITER $$
    
    CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(_schemaName varchar(100), _tableName varchar(100), _omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
    BEGIN
        SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns 
        WHERE table_schema = _schemaName AND table_name = _tableName AND FIND_IN_SET(COLUMN_NAME,_omitColumns) = 0 ORDER BY ORDINAL_POSITION;
    END
    

    selectステートメントを作成して実行します:

    SET @sql = concat('SELECT ', (SELECT 
    functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees'); 
    PREPARE stmt1 FROM @sql;
    EXECUTE stmt1;
    

    2。または、関数を記述せずに次のことができます。

    SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
    information_schema.columns WHERE table_schema = 'test' AND table_name = 
    'employees' AND column_name NOT IN ('age', 'dateOfHire')), 
    ' from test.eployees');  
    PREPARE stmt1 FROM @sql;
    EXECUTE stmt1;
    

    *テストを独自のスキーマ名に置き換えます

    **従業員を自分のテーブル名に置き換えます

    *** age、dateOfHireを省略したい列に置き換えます(空白のままにしてすべての列を返すか、1つの列名を入力して省略できます)

    ** **必要に応じて、関数内のvarcharの長さを調整できます



    1. hibernate + springアプリケーションからmysqlにcsvファイルをインポートする方法は?

    2. SQLでは常に小数点以下の桁数を表示しますか?

    3. AndroidとPhonegapを使用したSQLiteデータベースのストレージ

    4. String []パラメータをネイティブクエリに設定するにはどうすればよいですか?