Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Operator evaluasi logika hubung singkat

Ingatlah bahwa kueri tidak dijalankan secara imperatif. Kueri yang Anda tulis dapat berjalan di beberapa utas, dan oleh karena itu operator hubung singkat di klausa where tidak akan menghasilkan hanya satu hasil.

Sebagai gantinya, gunakan LIMIT klausa untuk hanya mengembalikan baris pertama.

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;

Untuk mendapatkan kecocokan terbaik untuk semua buku dalam kumpulan hasil, simpan hasilnya ke tabel sementara, temukan hasil terbaik, lalu kembalikan bidang yang menarik.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan pengikut di pos dengan cara yang efisien di laravel 5.1

  2. Tetapkan opsi default di dropdown php dan pertahankan saat mengirimkan kueri

  3. Bagaimana cara memesan kueri MySQL dengan kolom tertentu?

  4. mysql — Memasukkan baris dalam tabel 1 ketika baris tertentu dihapus pada tabel 2

  5. Tidak dapat terhubung ke database eksternal dari dalam pod kubernetes