Jag gör en inner join från tre tabeller och visar utvalda data i en listruta i ett formulär, problemet är att jag får upp en massa dubblerade värden pga min inner join...kan jag på något sätt göra en sortering där jag ignorerar att data finns i flera tabeller och bara visar ett värde av varje från tex. tabell 1 Så här ser SQL-satsen ut, och att köra en Distinct här går ju inte En liten fundering bara, Har jag fattat det hela rätt om jag tror att Svar: Försökte använda ditt förslag på SQL-sats men fär en mängd felmeddelande och då koncentrerat just runt "Select" Skulle du kunna lista vilka primärnycklar samt främmande nycklar du har per tabell? Distinct löser ju problem med dubbletter alt. group by men sen är ju frågan varför du får dubbletter. Mitt tips är att du skriver select tabellnamn1.*, tabellnamn2.*, tabellnamn3.* för att se vad det egentligen är som skiljer det som listas åt för nåt måste det ju vara som skiljer om du får dubbletter. Vad skulle man kunna göra med denna SQL-sats om man skulle använda sig av Distinct: Hur menar du skulle kunna göra? Testa att lägga in select distinct och se vad som händer. Ju färre fält du lägger ut desto färre poster kommer du antagligen att få. Händer just ingenting, inga resultat presenteras i listrutan... funderar på om man måste ha paranteser när man gör en SELECT DISTINCT ? Hur ser din select ut med distinct? Jag vet inte riktigt om det är nåt special i just Access syntaxen men det står säkert i hjälpen isåfall. Så här ser den ut, men denna returnerar exakt samma värde som den gör utan Distinct???Inner join
(Jag har ett objektnr som finns i två tabeller, min inner join visar då dessa i listrutan)Sv:Inner join
With Me.lbListruta1
.RowSource = _
"SELECT tInstrument.ID, tInstrument.nr, tInstrument.Datum, tkomb7.AC, tkomb7.BC, tInstrument.Funktion, " & _
"tkal.datum, tInstrument.Fabrikat, tInstrument.Modell, tInstrument.Instrumenttyp, " & _
"tInstrument.Instrumentuppgift " & _
"FROM (tKomb7 INNER JOIN tInstrument ON tKomb7.Komb_Id = tInstrument.Komb_Id) INNER JOIN tKal ON tInstrument.Id = tKal.Komb_Id " & _
" ORDER BY tInstrument.ID desc"
.ColumnHeads = True
.Requery
End With
När denna läses upp till formuläret så får jag dubbletter på "tInstrument.nr" då denna finns både i tabellerna tInstrument och i tKalSv: Inner join
i första INNER JOINen skriver du
...ON tKomb7.<b>Komb_Id</b> = tInstrument.<b>Komb_Id</b>
och i den andra
...ON tInstrument.<b>Id</b> = tKal.<b>Komb_Id</b>
stämmer det, borde det inte vara
...ON tInstrument.<b>Komb_Id</b> = tKal.<b>Komb_Id</b>
i den andra inner joinen eller är tInstrument.Id och tInstrument.Komb_Id samma värde?
och i så fall borde väl frågan se ut så här
SELECT tInstrument.ID, tInstrument.nr, tInstrument.Datum, tKomb7.AC, tInstrument.Funktion, tKal.datum, tInstrument.Fabrikat, tInstrument.Modell, tInstrument.Instrumenttyp, tInstrument.Instrumentuppgift
FROM tKal INNER JOIN (tInstrument INNER JOIN tKomb7 ON tInstrument.komb_Id = tKomb7.komb_Id) ON tKal.Komb_Id = tKomb7.komb_Id;Sv: Inner join
* tInstrument.nr är unik
* du med ovanstående sql får flera poster med samma tInstrument.nr
?
I så fall borde du kunna köra nåt i stil med följande monstrositet (varför kan inte bara access följa nån slags standard för sql?)
SELECT MassaJox
FROM ((SELECT FIRST(AC), FIRST(BC), Komb_id FROM tKomb7 GROUP BY Komb_id) komb7 INNER JOIN tInstrument ON komb7.Komb_id = tInstrument.Komb_id)
INNER JOIN (SELECT FIRST(datum), Komb_id FROM tKal GROUP BY Komb_id) k ON k.Komb_id = tInstrument.Id
(Hur kommer det sig att kolumnerna som joinas över heter så skumma saker?)
Sv:Inner join
Jag har 3 tabeller.
Tabell 1. tKomb7 = placering av instrument (Komb_id) flera instrument kan ha samma placering.
Tabell 2. tInstrument = Typ av instrument, flera typer har alltså samma placering (Komb_id från tabell 1) och för att särskilja de individa instrumenten så ger jag dessa ett löpnummer (ID räknare)
Tabell 3. tKal = Ändringar på individuella instrument (ID från tabell 2 blir Komb_id i tKal)där använder jag löpnr från tabell tInstrument för att indentifiera vilket instrument och lägger till en ny rad med uppgifter som datum varje gång instrumentet uppdateras.
Tabell 2 innehåller alltså grunddata för instrumentet, det är bara den jag vill visa, som det är nu så hämtar jag ett datum från tabell 3 och får på köpet med mej ytterligare en post av samma instrument..??
Den enda ändringen som jag behöver få till är att läsa in instrumentet från tabell 2 och datum från tabell 3..
Instrument.nr är mycket riktigt ett unikt nummer, Joinerna heter lite skumma saker för att det fanns enmassa unika kombinationer en gång i tiden (Unika kombinationer=Komb_id) ;)Sv: Inner join
Sv:Inner join
Joinar man på fel fält eller glömmer att joina på nåt fält som borde joinas på så kan det också ge dubbletter. Många till många kopplingar kan också se ut att ge dubbletter.
Man kan ju få bort dubbletter i rapporten genom att gruppera på det fält som är unikt i rapporten och strunta i att lista detaljerna. Då sållar rapporten bort dubbletter.Sv: Inner join
With Me.lbListruta1
.RowSource = _
"SELECT tInstrument.ID, tInstrument.nr, tInstrument.Datum, tkomb7.AC, tkomb7.BC, tInstrument.Funktion, " & _
"tkal.datum, tInstrument.Fabrikat, tInstrument.Modell, tInstrument.Instrumenttyp, " & _
"tInstrument.Instrumentuppgift " & _
"FROM (tKomb7 INNER JOIN tInstrument ON tKomb7.Komb_Id = tInstrument.Komb_Id) INNER JOIN tKal ON tInstrument.Id = tKal.Komb_Id " & _
" ORDER BY tInstrument.ID desc"
.ColumnHeads = True
.Requery
End With Sv:Inner join
Sv: Inner join
Sv:Inner join
I vanliga fall skriver man nåt i still med Select distinct fält1, fält2 from tabell1 osv....Sv: Inner join
With Me.lbListruta1
.RowSource = _
"SELECT Distinct tInstrument.ID, tInstrument.nr, tInstrument.Datum, tkomb7.AC, tkomb7.BC, tInstrument.Funktion, " & _
"tkal.datum, tInstrument.Fabrikat, tInstrument.Modell, tInstrument.Instrumenttyp, " & _
"tInstrument.Instrumentuppgift " & _
"FROM (tKomb7 INNER JOIN tInstrument ON tKomb7.Komb_Id = tInstrument.Komb_Id) INNER JOIN tKal ON tInstrument.Id = tKal.Komb_Id " & _
" ORDER BY tInstrument.ID desc"
.ColumnHeads = True
.Requery
End With