Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Toán tử đánh giá logic ngắn mạch

Hãy nhớ rằng một truy vấn không thực thi theo thứ bậc. Truy vấn bạn đã viết có thể chạy trên nhiều luồng và do đó toán tử ngắn mạch trong mệnh đề where sẽ không chỉ dẫn đến một kết quả.

Thay vào đó, hãy sử dụng LIMIT mệnh đề chỉ trả về hàng đầu tiên.

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;

Để có kết quả phù hợp nhất cho tất cả các sách trong một tập hợp kết quả, hãy lưu kết quả vào bảng tạm thời, tìm kết quả tốt nhất, sau đó trả về các trường thú vị.

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. có một chức năng mysql để giải mã các thực thể html không?

  2. Làm cách nào tôi có thể sử dụng YEAR (), MONTH () và DAY () của SQL trong Doctrine2?

  3. Cách phân tích cú pháp mảng trong mảng PHP-> JSON-> XCODE

  4. Thiết lập aspnetcore với cơ sở dữ liệu MySQL trong docker

  5. Cột nào để đặt đầu tiên trong chỉ mục? Cardinality cao hơn hay thấp hơn?