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

短絡論理評価演算子

    クエリは必須ではないことに注意してください。作成したクエリは複数のスレッドで実行される可能性があるため、where句の演算子を短絡しても結果は1つだけにはなりません。

    代わりに、LIMITを使用してください 最初の行のみを返す句。

    SELECT * FROM quantitycache
    WHERE bookstore_id = 1 OR city_id = 1 OR country_id = 1
    ORDER BY bookstore_id IS NULL ASC,
             city_id IS NULL ASC,
             country_id IS NULL ASC
    LIMIT 1;
    

    結果セット内のすべての書籍に最適なものを取得するには、結果を一時テーブルに保存し、最適な結果を見つけてから、興味深いフィールドを返します。

    CREATE TEMPORARY TABLE results (id int, book_id int, match_rank int);
    
    INSERT INTO results (id, book_id, match_rank)
    SELECT id, book_id, 
        -- this assumes that lower numbers are better
        CASE WHEN Bookstore_ID is not null then 1 
             WHEN City_ID is not null then 2 
             ELSE 3 END as match_rank
    FROM quantitycache
    WHERE bookstore_id = 1 OR city_id = 1 OR country_id = 1;
    
    Select * 
    from (
        select book_id, MIN(match_rank) as best_rank 
        from results 
        group by book_id
    ) as r
    inner join results as rid 
        on r.book_id = rid.book_id 
        and rid.match_rank = r.best_rank
    inner join quantitycache as q on q.id = rid.id;
    
    DROP TABLE results;
    



    1. このSQLServerクエリ分割計算の何が問題になっていますか?

    2. Oracle PL/SQLシーケンスがオブジェクトコンストラクタで期待どおりにインクリメントしない

    3. iPhoneアプリ(Swift)からMySQLデータベースに画像を投稿するにはどうすればよいですか?

    4. TimescaleDBを簡単にデプロイする方法