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

Kompleks MySQL-forespørgsel giver forkerte resultater

select * from (
    select a.idArticle, a.content, max(`order`) max_order
    from words_learned wl
    join words w on w.idwords = wl.idwords
    join article a on a.idArticle = w.idArticle
    where wl.userId = 4
    group by a.idArticle
) a
left join (
    select count(*) unknown_count, w2.idArticle from words w2
    left join words_learned wl2 on wl2.idwords = w2.idwords
    and wl2.userId =  4
    where wl2.idwords is null
    group by w2.idArticle
) unknown_counts on unknown_counts.idArticle = a.idArticle
where unknown_count is null or unknown_count < 10
order by max_order desc
limit 100

http://sqlfiddle.com/#!2/6944b/9

Den først afledte tabel vælger unikke artikler, som en given bruger kender et eller flere ord fra samt den maksimale order værdien af ​​disse ord. Den maksimale ordreværdi bruges til at sortere de endelige resultater, så artikler, der indeholder ord af høj orden, vises først.

Den anden afledte tabel tæller antallet af ord, en given bruger ikke kender for hver artikel. Denne tabel bruges til at udelukke artikler, der indeholder 10 eller flere ord, som brugeren ikke kender.




  1. Brug af IN-sætningen med en kommasepareret streng fra outputtet af en replace() funktion i Oracle SQL

  2. underligt - mysqls sql::SQLException fanges ikke af sin type, men fanges som std::exception og sendes tilbage med succes

  3. 5 måder at opdatere data med en underforespørgsel i Oracle SQL

  4. Windows7 WAMP 64-bit stack MySQL problemer