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

Mysqlクエリは、テーブルのすべての列の文字列を検索します

    動的SQLで値を連結する方法は次のとおりです。

    set @Pattern = '%augusto%';
    
    select @q := concat('select * from Table1 ',
                       'where concat(', group_concat(column_name), ', "") like "', @Pattern, '"'
                       )
    from information_schema.columns c
    where table_name = 'Table1';
    
    prepare st from @q;
    execute st;
    
    deallocate prepare st;
    

    もちろん、動的SQLは特に移植性がありません。このアイデアはほとんどのデータベースで機能します。コードは異なって見えます。

    テストされ、動作しているここ

    そして最後に、変数置換を使用してこれを行うことができます(これはより良いアプローチです):

    select @q := concat('select * from Table1 ',
                       'where concat(', group_concat(column_name), ', "") like ?'
                       )
    from information_schema.columns c
    where table_name = 'Table1';
    
    set @p = '%augusto%';
    
    prepare st from @q;
    execute st using @p;
    
    deallocate prepare st;
    

    また、テスト済み(;-)。



    1. railsがテーブル定義にid::serialを含むかどうかを決定するものは何ですか?

    2. シーケンシャルスループット速度とフィード

    3. 複数の自己結合を使用した大きなテーブルでの空間クエリの実行速度が遅い

    4. PDOクラスの拡張