Jag har två tabeller jag behöver plocka data från. Nämligen följande: Efter lite meckande hittade jag en lösning som funkar eftersom det är SQL server. > Efter lite meckande hittade jag en lösning som funka Du får joina in datatabellen två gånger: Den funkade för mig enligt en uppställning av tabeller med innehåll som du givit.Joina flera tabeller och få ut flera värden från ett fält?
[artikeltabell]
artikelid
rubrik
[datatabell]
artikelid (kan finnas fler för detta är en hänvisning till artikel, dock kan det bara finnas en av varje datatyp)
datatyp (bestämmer vilken typ av data fältet "datainnehåll" innehåller, t ex "bild")
datainnehåll (själva datat, t ex "finbild.jpg")
Jag vill i en fråga få ut:
artikelid, rubrik, datainnehåll för datatyp "bild", datainnehåll för datatyp "ljud"
Följande lösning ger ju två poster per artikelid (en där datatypen är bild och en ljud), vilket jag vill undvika. Hur göra?
SELECT artikelid, rubrik, datainnehåll
FROM artikeltabell , datatabell
WHERE artikeltabell.id=datatabell.id AND datatyp='bild' OR datatyp='ljud'
Obs! Ovanstående är bara ett exempel för att verkligheten skulle vara för komplicerad och innehålla för mycket som inte var relevant.Sv: Joina flera tabeller och få ut flera värden från ett fält?
<code:sql>
select distinct
artikelId,
Artikeltabell.Rubrik,
( select distinct data from datatabell where datatyp = 1 ) as DataBild,
( select distinct data from datatabell where datatyp = 2 ) as DataLjud
from
datatabell inner join Artikeltabell
on Artikeltabell.ArtId = datatabell.ArtikelId
</code>
Den är inte vacker men det beror lite på att du försöker göra något som din normalisering av databasen inte tagit hänsyn till.
//Mikael SandSv:Joina flera tabeller och få ut flera värden från ett fält?
Nej, den fungerar inte. Du kopplar ju inte datatabellen till någon artikel i de nästlade selectsatserna.
Det är enbart om du har en enda bild och ett enda ljud i datatabellen som du kan köra frågan, och då får du ju ut den bilden och det ljudet för alla artiklarna.Sv: Joina flera tabeller och få ut flera värden från ett fält?
SELECT a.artikelid, a.rubrik, db.datainnehåll as Bild, dl.datainnehåll as Ljud
FROM artikeltabell a
LEFT JOIN datatabell db on db.id = a.id AND db.datatyp='bild'
LEFT JOIN datatabell dl on dl.id = a.id AND dl.datatyp='ljud'Sv: Joina flera tabeller och få ut flera värden från ett fält?
//Mikael Sand