sql >> Databáze >  >> RDS >> Mysql

Složitý dotaz MySQL dává nesprávné výsledky

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

První odvozená tabulka vybírá jedinečné články, z nichž daný uživatel zná jedno nebo více slov, a také maximální order hodnotu těch slov. Hodnota maximálního pořadí se používá k seřazení konečných výsledků tak, aby se články obsahující slova vyššího řádu objevily jako první.

Druhá odvozená tabulka počítá u každého článku počet slov, která daný uživatel nezná. Tato tabulka se používá k vyloučení všech článků, které obsahují 10 nebo více slov, která uživatel nezná.




  1. Jak přejmenovat databázi MySQL

  2. Předat hodnoty načtené ze souboru jako vstup do SQL dotazu v Oracle

  3. SQL Server JSON_Modify, jak vše aktualizovat?

  4. Příkaz GROUP BY + CASE