sql >> Database >  >> RDS >> Mysql

SQL:groeperen op uit andere tabel en resultaat omkeren

Heel eenvoudig en snel in PostgreSQL met DISTINCT ON - geen standaard SQL, dus niet beschikbaar in elk RDBMS.

De vraag vermeldt het niet, maar afgeleid van de codevoorbeelden zoekt het eigenlijk naar de rij met de "laatste datum" voor elke ontvanger voor een bepaalde author .

SELECT DISTINCT ON (r.recipient)  m.*
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
ORDER  BY r.recipient, m.date DESC, r.m_id -- to break ties

Details en meerdere standaard SQL-alternatieven hier:
Selecteer de eerste rij in elke GROUP BY-groep?

Een andere oplossing met basis, standaard SQL. Werkt met alle grote RDBMS, inclusief MySQL (sinds die tag is toegevoegd):

SELECT m.* 
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
AND NOT EXISTS (
   SELECT 1
   FROM   message   m1
   JOIN   recipient r1 ON r1.m_id = m1.id
   WHERE  r1.recipient = r.recipient 
   AND    m1.author = 1
   AND    m1.date > m.date
   )

Alleen de rij met de laatste datum passeert de NOT EXISTS anti-semi-join.



  1. MySQL-buitenlandse sleutels

  2. INSERT uitvoeren als de tabel leeg is?

  3. jQuery-Ajax-ophaalfunctie met PHP-klassen en functies

  4. Kan stuurprogrammaklasse niet laden:com.mysql.jdbc.Driver Spring Boot