mysjkin Skrevet 23. juli 2009 Del Skrevet 23. juli 2009 Skulle helst ha brukt en annen database, men nå i første omgang er et i hvert fall mysql.. problemstilling: Henter inn måledata i filer som inneholder flere målinger, disse prosesseres og deretter lastes både rådata og prosesserte data opp i databasen. Jeg har da blant annet følgende tabeller: (som inneholder mange flere felter, men jeg viser bare de som er relevante her) datafile id, name, ... rawdata id, datafileid, lineid, ... measurement id, datafileid, lineid, ... Lineid er en id som er hentet fra rådatafilen, med samme datafileid og lineid er det samme måling det er snakk om som rådata eller prosesserte data. Jeg ønsker å ha en spørring som viser hvor mange datapunkter jeg har som hhv rådata og prosesserte data pr datafil og kjører da: select d1.name , count(r.id), count(m.id) from datafile d1 left join rawdata r on r.datafileid=d1.id ,datafile d2 left join measurement m on m.datafileid=d2.id where (d1.id=d2.id or d1.id is null or d2.id is null) and (linenum=lineid or linenum is null or lineid is null) group by d1.name; kløningen i where med or er for å få med data som bare er lastet inn i den ene eller andre formen. jeg fikk en følelse av at jeg hadde brukt feil join, og prøvde å 'vrenge' spørringen: select d.name , count(r.id), count(m.id) from rawdata r right outer join measurement m on r.datafileid = m.datafileid and linenum=lineid, datafile d where d.id = m.datafileid or (m.datafileid is null and d.id = r.datafileid) group by d.name; men da får jeg ikke med data som er lastet opp som bare rawdata (eller bare measurement ved å bytte right outer join med left outer join) jeg trodde da at med en 'outer' join skulle jeg få med alt? mysql godtar ikke bare outer join, må ha enten left eller right... Mener da at det der var mulig å gjøre i hine glade dager da jeg kunne bruke postgresql? Og spørsmålet som dukker opp blir jo da, hvorfor ikke lage en felles tabell siden det er et 1:1 forhold mellom measurement og rawdata? Godt spørsmål, mulig at jeg bare skal gjøre det, en ulempe blir at det blir mye tomme felter i tabellen der hvor bare et av datasettene er lastet opp. M. Lenke til kommentar
Frank2004 Skrevet 1. august 2009 Del Skrevet 1. august 2009 Anbefaler at du holder deg til en form for join-syntax. Spørringene dine inneholder en ansi-syntax-join, og en gammeldags cross-join. Jeg ønsker å ha en spørring som viser hvor mange datapunkter jeg har som hhv rådata og prosesserte data pr datafil Hva med noe slikt? select d.name, count(r.id) as raw_data_count, count(m.id) as measurements from datafile d left join measurement m on (m.datafile_id = d.id) left join rawdata r on (r.datafile_id = d.id) group by d.name Lenke til kommentar
mysjkin Skrevet 21. august 2009 Forfatter Del Skrevet 21. august 2009 Anbefaler at du holder deg til en form for join-syntax. Spørringene dine inneholder en ansi-syntax-join, og en gammeldags cross-join. Jo takk, synes ikke det så pent ut, men... nå som jeg endelig fikk somlet meg til å prøve ditt forslag, så ender jeg opp med å få produktet av raw_data_count og measurement i de radene jeg har treff i begge... det var for å unngå det jeg hadde med den siste grisete where klausulen. M. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå