dbwebb-se / databas

Course repo for database course (dbw).
Other
4 stars 2 forks source link

Full outer join via left + right + union #34

Open mosbth opened 3 years ago

mosbth commented 3 years ago

Tänkte bara visa hur man kunde lösa sista uppgiften i årets tenta.

Med tanke på hur uppgiften är skriven kan det finnas flera sätt att lösa det men så här gjorde jag.

SELECT * FROM
(
    SELECT
        CONCAT(m.fornamn, " (", m.alias, ") ", m.efternamn) AS Namn,
        m.ort AS Ort,
        h.namn AS Hund,
        CONCAT(r.namn, " ", IF(r.godkand != "ja", "(X)", "")) AS Ras,
        m2h.registrerad AS Registrerad
    FROM medlem AS m
        LEFT OUTER JOIN medlem2hund as m2h
            ON m.id = m2h.medlem_id
        LEFT OUTER JOIN hund as h
            ON m2h.hund_id = h.id
        LEFT OUTER JOIN ras as r
            ON r.id = h.ras_id

UNION

    SELECT
        CONCAT(m.fornamn, " (", m.alias, ") ", m.efternamn) AS Namn,
        m.ort AS Ort,
        h.namn AS Hund,
        CONCAT(r.namn, " ", IF(r.godkand != "ja", "(X)", "")) AS Ras,
        m2h.registrerad AS Registrerad
    FROM medlem AS m
        LEFT OUTER JOIN medlem2hund as m2h
            ON m.id = m2h.medlem_id
        RIGHT OUTER JOIN hund as h
            ON m2h.hund_id = h.id
        LEFT OUTER JOIN ras as r
            ON r.id = h.ras_id
) AS t
ORDER BY
    Ras, Registrerad DESC, Hund
;

Jag såg att någon hade fysiskt uppdaterat tabellen med ett X (ej godkänd ras), men tanken var en if-sats eftersom data om rasens "godkännande" ligger i databasen.