Efter att ha letat runt ordentligt på webforum utan att hitta svaret, frågar jag nu. Svaret finns här säkert, men jag har inte lyckats läsa ut det, är lite för dålig på SQL än så länge...
Har en artikel-tabell och en bild-tabell. För varje artikel kan det finnas ingen eller flera bilder. Dessa identifieras ihop med artikel.id = bild.artikelId.
Jag vill nu få upp en lista över alla artiklar och bara vet om artikeln har någon bild eller ej, kvittar hur många.
SELECT artikel.id, bild.bild FROM artikel
LEFT JOIN bild ON bild.artikelId = artikel.id
ORDER BY id DESC
Det fungerar ju bra, men recordsetet innehåller då lika många poster för samma artikel, som artikeln har bilder.
Hur löser jag detta? Jag vill bara veta alltså om artikeln har några bilder eller ej. Kikat runt på IN och CASE och tjoflöjt men inte hittat det klockrena exemplet där till och med jag förstår.
SELECT distinct artikel.id, bild.bild,
CASE WHEN bild.artikelId IS NULL THEN 'Ingen bild' ELSE 'Bild' END AS bild
FROM artikel
LEFT JOIN bild ON bild.artikelId = artikel.id
ORDER BY id DESC
Tack för svaret.
Men enda skillnaden för mig blir den att "bild" blir "Bild" eller "Ingen bild".
Fortfarande visas samma artikel flera gånger i rec-setet, så många gånger som den har bild. Och i de fall det inte finns någon bild, eller en bild, bara en gång naturligtvis.
Distinct har alltså ingen funktion i mitt läge? Detta eftersom det är olika bilder. Byter jag namn i tabellen på en bild, så att en artikel innehåller två bilder som heter samma sak, då går distinct in och visar bara en.
Jag vill ha en distinct som gör att artikel.id bara blir en. Så att säga.
SELECT artikel.id, bild.bild,
CASE WHEN exists(SELECT artikelId FROM bild WHERE bild.artikelId = artikel.id) THEN 'Bild' ELSE 'Ingen bild' END AS bild
FROM artikel
ORDER BY id DESC
SELECT artikel.id, case count(bild.artikelId)
when 0 then 'Ingen bild' else 'Det finns bilder' end
FROM artikel
LEFT JOIN bild ON bild.artikelId = artikel.id
group by artikel.id
ORDER BY id DESC