Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Operatory oceny logiki zwarcia

Pamiętaj, że zapytanie nie jest wykonywane bezwzględnie. Napisane zapytanie może działać w wielu wątkach, dlatego operator zwarcia w klauzuli where nie dawałby tylko jednego wyniku.

Zamiast tego użyj LIMIT klauzula zwracająca tylko pierwszy wiersz.

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;

Aby uzyskać najlepsze dopasowanie dla wszystkich książek w zestawie wyników, zapisz wyniki w tabeli tymczasowej, znajdź najlepszy wynik, a następnie zwróć interesujące pola.

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. pomiń kopiowanie do tabeli tmp na dysku mysql

  2. Zdobądź pracowników, którzy są poniżej średniej pensji po podwyżce

  3. Którego typu danych MySQL użyć do przechowywania wartości logicznych

  4. Pokaż obraz BLOB PHP MySQL wraz z innymi danymi

  5. Jak używać ON DUPLICATE KEY UPDATE w moim modelu CodeIgniter?