sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag använda COALESCE() i WHERE-satsen optimalt?

Du kan göra beräkningen med två separata underfrågor:

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';

Index kan användas för varje delfråga, så det borde vara snabbare överlag. Förresten, du behöver inte oroa dig för NULL värden, eftersom COUNT(*) i en korrelerad underfråga returnerar alltid ett värde. Om inget matchar blir värdet 0 .




  1. Mysql SELECT inuti UPPDATERING

  2. Detta polygonobjekt stänger sig själv. Varför misslyckas denna infogning fortfarande med fel 3037:Ogiltig GIS-data?

  3. MySQL - Hur visar man alla dagars poster i en viss månad?

  4. Vad är prestandaskillnaden mellan infoga ignorera och ersätt i MySQL?