sql >> Database >  >> RDS >> Mysql

Gebruik een enkele query om uit meerdere tabellen te halen

Je zou dit moeten kunnen bereiken met een self-join, zoals:

SELECT DISTINCT e2.eventId
FROM event_tags e1
INNER JOIN event_tags e2 
    ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
WHERE e1.eventId = {}

Ik merk dat de tweede zoekopdracht een LIMIT 3 . heeft clausule. Houd er allereerst rekening mee dat zonder een ORDER BY clausule levert dit geen voorspelbare resultaten op. Hier is een oplossing gebaseerd op de vensterfunctie ROW_NUMBER() (beschikbaar in MySQL 8), die niet meer dan 3 event_id oplevert voor elke overeenkomende tag:

SELECT DISTINCT event_id FROM (
    SELECT e2.eventId, ROW_NUMBER() OVER(PARTITION BY e1.eventId ORDER BY e2.eventId) rn
    FROM event_tags e1
    INNER JOIN event_tags e2 
        ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
    WHERE e1.eventId = {}
) WHERE rn <= 3



  1. Structuurweergave Controle Vinkje Toevoegen Verwijderen Knooppunten

  2. Onjuiste tekenreekswaarde:'\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL

  3. Groeperen op som en totale som in een enkele zoekopdracht

  4. Retourneer een boolean van een PHP-bestand naar het AJAX-bestand - Volg-knop