sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg bruge COALESCE() i WHERE-sætningen optimalt?

Du kan udføre beregningen med to separate underforespørgsler:

select coalesce(qa2.subject, qa.subject) as question_subject,
       qa.body,
       ( (select count(*)
          from viewed_items vi
          where qa.related = vi.question_id
         ) +
         (select count(*)
          from viewed_items vi
          where qa.related is null and qa.id = vi.question_id
         )
        ) as total_question_viewed
from questions_and_answers qa left join
     questions_and_answers qa2
     on qa.related = qa.id 
where body like ':entry';

Indekser kan bruges til hver underforespørgsel, så det burde være hurtigere generelt. I øvrigt behøver du ikke bekymre dig om NULL værdier, fordi COUNT(*) i en korreleret underforespørgsel returnerer altid en værdi. Hvis intet matcher, vil værdien være 0 .




  1. Symbolerne skal jeg være opmærksom på for SQL-injektion

  2. MySQL LOAD DATA INFIL med PÅ DUBLIKAT NØGLEOPDATERING

  3. php MySql forbindelsesfejl

  4. Sådan får du den auto-increment primære nøgleværdi i MySQL ved hjælp af Hibernate