Just nu i M3-nätverket
Gå till innehåll

Får dubletter av resultatet, vad är felet?


Riker

Rekommendera Poster

Jag får dubletter av resultaten. (Se bifogad fil)

Samma resultat listas 4 ggr, enda skillnaden är i tabellen Lagringstid.

Resultaten listas 1 gång för varje tid som finns i tabellen, istället för som tänkt, mot den tiden som den pekar mot.

SQL sats: 

SELECT * FROM ((Lager INNER JOIN (Tider INNER JOIN Lagringstider ON Tider.TID = Lagringstider.TID) ON Lager.LID = Lagringstider.LID) INNER JOIN Plats ON Lager.LID = Plats.LID) INNER JOIN ((LagerVara INNER JOIN Stora_arkivet ON LagerVara.LVID = Stora_arkivet.LVID) INNER JOIN (Mängd INNER JOIN LagringsData ON Mängd.DID = LagringsData.MängdID) ON Stora_arkivet.APID = LagringsData.APID) ON Lager.LID = LagringsData.LagerID WHERE [LagringsData].[LagerID] = 3 AND Not [LagringsData].[Kastad] AND Plats.PID = 1849 ORDER BY [LagringsData].[Arkiveringsdatum] asc, [LagringsData].[LDID] asc

Någon som vet hur man kan ändra i sql satsen så att endast den korrekta lagringstiden listas?

post-125952-0-64433700-1378895191_thumb.png

Länk till kommentar
Dela på andra webbplatser

Din select-sats är mer eller mindre oläsbar. Du har inte med tabell-definitioner/beskrivningar eller test-data.

 

Ju lättare du gör för oss att förstå, desto större är chansen att du får hjälp!

Länk till kommentar
Dela på andra webbplatser

Jag har gått igenom sql satsen och dess data.

Ovan är relations schemat för databasen.

Om jag går igenom första posten i listan, "Test 1".

För det första anges i sökningen att [LagringsData].[LagerID] = 3 AND Not [LagringsData].[Kastad] AND Plats.PID = 1849

LagerID = 3 innebär att posten är lagrad i arkiv 3 (vilket lagras i tabellen "stora_arkivet". Plats.PID = 1849 innebär att den lagras på arkivplatsen som har id 1849.

Lagringsdata.LagringstidID pekar på posten med id 11 i Lagringstider, som i sin tur pekar på posten med id 1 i tabellen "Tider". Denna tabell innehåller de olika tider som listas i första inlägget, kolumnen "Lagringstid"

Endast en tid skall visas, i detta fall tiden med id 1, vilket är 1 år.

Problemet är alltså att samma post även listas med de andra lagringstiderna som finns i tabellen.

 

Jag hoppas att detta förklarar det lite bättre

Länk till kommentar
Dela på andra webbplatser

Vilken röra... Varför är det t.ex. flera olika tabeller för namn, namn_1 etc. Och tabell-namnen bör återspegla vilka uppgifter man sparar i tabellen, t.ex. en tabell för person-uppgifter skulle jag inte kalla namn utan för personer.

 

Behövs verkligen alla tabeller för lagringstider? Varför en separat tabell för mängd?

 

Varför flera olika lager-tabeller? Vad är syftet?

Länk till kommentar
Dela på andra webbplatser

Egentligen finns det bara en namn tabell. Access skapade de olika relationerna, antagligen för att flera fält i Lagringsdata är kopplad mot namn tabellen, tex ArkiveradAv samt Ansvarig ...

Vad gäller lagringstider så anger ena tabellen vilka lagringstider som är valbara för ett arkiv. Den andra tabellen, Tider innehåller de olika arkivering tiderna.

Mängd tabellen innehåller vilken typ av post som lagrats, i listan, Fat eller B. Låda. Den används i en rull lista där avändaren fyller i hur mycket som lagrats i ett textfält samt vad som lagrats i en rull lista (som hämtas ur mängd tabellen)

 

Tanken med två tabeller för lagervara, var att den andra tabellen, Lagervara innehåller ett Memo fält och om jag inte minns fel så tar de en massa utrymme i databasen. Och inte alla poster i "stora_arkivet" kommer att lagra data i det fältet, så jag tänkte att det vore onödigt att ha en massa tomma memo fält i databasen. Istället så länkar den bara till ett fält i Lagervara då data finns i fältet. Det var iaf tanken, fast med allt trubbel som det skapat så har jag börjat ångra mig, det vore kanske bäst att ändra det och lägga in memo fältet i "stora_arkivet"

 

Edit:

Ang. tabellen "lagringstider", så pekar den på vilka lagringstider som är valbara, i detta fall (för stora_arkivet), 1 år, 2 år, 5 år samt 10 år.

Länk till kommentar
Dela på andra webbplatser

Efter en del experimenterande med access så skrev jag om sql frågan. Den verkar fungera som den skall. Så här ser den fungerande frågan ut:

SELECT * FROM Plats INNER JOIN ((Tider INNER JOIN Lagringstider ON Tider.TID = Lagringstider.TID) INNER JOIN ((Lagervara INNER JOIN Stora_arkivet ON Lagervara.LVID = Stora_arkivet.LVID) INNER JOIN LagringsData ON Stora_arkivet.APID = LagringsData.APID) ON Lagringstider.LGID = LagringsData.LagringstidID) ON Plats.PID = LagringsData.ArkivplatsID WHERE [LagringsData].[LagerID] = 3 AND Not [LagringsData].[Kastad] AND Plats.PID = 1849 ORDER BY [LagringsData].[Arkiveringsdatum] asc, [LagringsData].[LDID] asc

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...