Hur skall jag göra för att koppla och läsa ut data mellan tabellerna?
Jag har en mycket stor tabell med 160 000 poster där jag behöver få ut en rad som matchar en tabell med unika nycklar.
Jag kanske inte hänger med riktigt men om du bara vill få ut en av varje unikt värde i tabell 2 så borde du väl kunna använda GROUP BY? Du kommer behöva använda någon aggregeringsfunktion. Lite osäker på vilken som kan vara lämplig, men kanske något att gå på!
ex.
SELECT nyckel,person,resvag,ovrigt FROM tabell1
join tabell2 on tabell1.nyckel = tabell2.nyckel
GROUP BY nyckel
Jag kanske inte hänger med riktigt men om du bara vill få ut en av varje unikt värde i tabell 2 så borde du väl kunna använda GROUP BY? Du kommer behöva använda någon aggregeringsfunktion.
Nej! Group by används för att partitionera data och ska aldrig användas bara för att få ut unika värden. Det blir en massa onödigt jobb för databasen.
Och aggregerande funktioner har man för att räkna: dvs ta ut max, min, summa... et c. Verkar inte vara tillämpligt här.
(Edit: Eller så hade jag missförstått problemet här... :r )
JPS
Vad är det som avgör vilket unika värde du vill ha ut? Tex i ditt exempel på 101, vad är det som gör att du vill ha ut info om Bosse men inte om Janne och Nisse? Att det står först? Eller kunde det lika gärna varit Nisses info som kom ut om bara inte Janne och Bosse också kom ut? :q
Finns alla id-värden från tabell2 med i tabell1? Eller kan det finnas något id i en av tabellerna som inte finns i den andra?
Tabellen som innehåller 160 000 poster har organistationsnummer som jag behöver matcha med tabell 2. Tabell 2 innehåller utsorterade (efter flera led) unika organistationsnummer och jag behöver en ny lista med valfi rad från tabell 1 där organisationsnummer är lika. Jag har provat att få ut unika poster från tabell 1 men lyckas inte - får ut 150 000.
Vad är det som avgör vilket unika värde du vill ha ut? Tex i ditt exempel på 101, vad är det som gör att du vill ha ut info om Bosse men inte om Janne och Nisse? Att det står först? Eller kunde det lika gärna varit Nisses info som kom ut om bara inte Janne och Bosse också kom ut?
Svar: det spelar ingen roll vilken rad som matchas.
Finns alla id-värden från tabell2 med i tabell1? Eller kan det finnas något id i en av tabellerna som inte finns i den andra?
Svar: tabell 2 har helt unika organisationsnummer som finns med i tabell1. Orgnummer som finns i tabell 2 kan förekomma mellan 1-10 ggr i tabell 1.
En lösning om möjligt är att först försöka gruppera tabell 1 men jag vet inte hur jag skall göra då group by nästan får med alla poster. Vet inte om det går att köra group by på bara ett fält när alla fält behöver vara med i resultatet?
Peters sql-får min dator att jobba mer än tidigare och tyvärr så stannar frågan vid 240 poster. Jag tror att det är för mycket data att gå igenom (sql-en fungerar utmärkt annars) och jag behöver då hjälp med att få ner antalet poster i tabell 1 - 160 000 till enbart unika poster. Någon som har en aning hur man gör då group by inte fungerar.
Finns alla id-värden från tabell2 med i tabell1? Eller kan det finnas något id i en av tabellerna som inte finns i den andra?
Svar: tabell 2 har helt unika organisationsnummer som finns med i tabell1. Orgnummer som finns i tabell 2 kan förekomma mellan 1-10 ggr i tabell 1.
Då behöver du aldrig blanda in tabell2, eftersom alla unika orgnummer finns i tabell1 (visserligen flera gånger, men det finns alltså inget nummer som INTE finns i tabell1).
Har du fått in ett unikt idvärde för alla 160000 rader i tabell1? Det måste du ha för att följande ska kunna funka. Men givet att du har det bör du kunna banta Peters förslag till:
select <columns>
from tabell1 t1
where t1.id
= ( select min(id)
from tabell1
where orgnr = t1.orgnr )
Alternativt:
CREATE VIEW Least AS
SELECT orgnr, min(id) as minid
FROM tabell1
GROUP BY orgnr;
select <columns>
from tabell1 T INNER JOIN Least L ON T.id = L.minid;
DROP VIEW Least;
Vilket av dessa två skrivsätt som är mest optimalt vet jag inte ... Det är också fullt möjligt att det finns bättre sätt att skriva...
Får bara ut en post med alternativ 1 och alt.2 år jag inte o funka - sitter just nu med MS Access. (Har inte haft tid att ladda över all data till MY-SQL.)