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

条件がクエリを実行する場合、それ以外の場合は他のクエリを実行します

    編集: ストアドプロシージャの要求について以下で述べたことは正しくありません。これを試してください:

    SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
        THEN <QUERY A>
        ELSE <QUERY B>
    END
    

    これは確かにケース式であり、ストアドプロシージャの外部では正常に機能します:-)

    例:

    mysql> SELECT CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
    +---------------------------------------------------------------------+
    | CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
    +---------------------------------------------------------------------+
    | foo                                                                 |
    +---------------------------------------------------------------------+
    1 row in set (0.01 sec)
    
    mysql> SELECT CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
    +---------------------------------------------------------------------+
    | CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
    +---------------------------------------------------------------------+
    | bar                                                                 |
    +---------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    すでに賛成票を集めているため、歴史的な関心については以下の古い回答:

    以下を使用できると思いますが、ストアドプロシージャ内でのみ使用できます:

    CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
        WHEN 1 THEN <QUERY A>
        ELSE <QUERY B>
    END CASE
    

    これはCASEです CASEとは異なるステートメント 式... https://dev.mysql.com/doc /refman/5.0/en/case.html 残酷な詳細があります。

    実際、一般的に、条件付きでさまざまなクエリを実行する場合は、ストアドプロシージャに目を向ける必要があると思います。間違っている可能性がありますが、それが現時点での私の直感です。あなたがそれを行うことができれば、それはおそらくCASE式であるでしょう!

    最後の編集:実際の例では、おそらくアプリケーションで条件付きビットを実行し、検索対象を決定したらSQL(またはSQLを生成するORM)に渡すだけです。




    1. Oracleで文字列内の単語数をカウントするにはどうすればよいですか?

    2. 通信リンク障害-サーバーから正常に受信された最後のパケットは

    3. Laravelビジターカウンター

    4. mysqlでjoinを使用する場合は、右側のテーブルから最新のレコードを選択してください