Jag har en fråga om hur man enklast omväxlande skriver ut poster från 2 tabeller. Snabbis: jag har funderat länge på detta! har ännu inte riktigt löst det men på en del sidor passar det att göra ett recordset och sedan jämföra företagsid. Tack för hjälpen, jag ska se om jag kan få det att fungera under dagen... Tack för hjälpen... Jag fick det att fungera nu. Är väldigt tacksam! Tror han använde mitt exempel. Jaha... Nåja... :-) JOINS är ju mycket Enkelt. Låt oss ta en INNER JOIN först. Ger samma resultat som din fråga: Får man ut alla företag och personer trots att man bara skriver FROM foretag alltså? Oj, det står ju "INNER JOIN person"... Inner Join kanske inte skiljer något prestanda mässigt från en Cross Join (Heter så när man separerar tabellerna med , ) med where sats. Men jag tycker att det lättare syns vad frågan gör och fungerar. Om du använder Access så använd frågor. De anropas precis som vanligt, typ SELECT * From FråganSkriva ut poster omväxlande från 2 tabeller
Så här har jag tänkt mig:
Företag 1
-Person 1
-Person 2
-Person 3
Företag 2
-Person 4
-Person 5
-Person 6
Alltså: Jag har en tabell med företagsinformationen och en tabell med
informationen om varje person. Dessa tabeller är "ihopkopplade" med
foretagID.
Min fråga är hur jag ska göra för att få det att fungera. Har försökt med
att använda mig av 2 RecordSet, men inte lyckats. Är mycket tacksam för hjälp och exempel!
//AdamSv: Skriva ut poster omväxlande från 2 tabeller
Set rsCompany = <<<öppna alla företag i ett recordset>>>
Do until rsCompany.Eof
<<<Skriv Ut företag>>>
rsPerson.Open "SELECT * FROM <<<PersonTabellen>>> WHERE FöretagsID=" & rsCompany("FöretagsID"), conn
Do until rsPerson.Eof
<<<Skriv Ut Person>>>
rsPerson.MoveNext
Loop
rsPerson.Close
rsCompany.MoveNext
Loop
(Korrigerat inre loop från:"rsCompany.MoveNext" till:"rsPerson.MoveNext")Sv: Skriva ut poster omväxlande från 2 tabeller
improvisera med detta:
SQL-satsen: SELECT * FROM foretag, person WHERE foretag.foretagID=person.foretag
loopa sedan alla poster i rs och kolla om foretagID är samma för aktuellt och föregående foretagID. om det är det skrivs personnamnet ut under aktuellt företagsnamn, annars skrivs företagsnamnet ut...
det blev lite konstigt här men vitsen är att man får en sql-slagning i stället för "konsum".
Min skivlista på: http://purjo.com/purjo/skivor/list_release.asp är skriven med ett rs. artistID jämförs med föregående och avgör då om artistnamnet ska skrivas ut.
/ DavidSv: Skriva ut poster omväxlande från 2 tabeller
/AdamSv: Skriva ut poster omväxlande från 2 tabeller
//AdamSv: Skriva ut poster omväxlande från 2 tabeller
;O)
Varför använder du inte en INNER eller LEFT Join? Skulle jag gjort istället för att använda mig av en CROSS JOIN med ett whare wilkor. Vet inte om det påverkar prestanden. Men det borde det göra.Sv: Skriva ut poster omväxlande från 2 tabeller
När det gäller join är jag helt ute i skogen... Hur göra och varför?
/ DavidSv: Skriva ut poster omväxlande från 2 tabeller
strSQL = "SELECT * FROM foretag INNER JOIN person ON foretag.foretagID = person.foretag"
I princip har jag bara ersatt komma tecknet med "INNER JOIN" och "WHERE" med "ON". Är inte svårare än så.
Vill man ha alla poster från foretag. Även de som saknar person. Skriver man en "LEFT JOIN"
strSQL = "SELECT * FROM foretag LEFT JOIN person ON foretag.foretagID = person.foretag"
Resultatet är innehåller alla poster som en "INNER JOIN" skulle ge. Plus de företag som saknar personer. För dessa poster är fälten från persson null.
Detta kan man använda fär att t.ex söka efter företag som saknar personer:
strSQL = "SELECT * FROM foretag LEFT JOIN person ON foretag.foretagID = person.foretag WHERE person.foretag Is Null"Sv: Skriva ut poster omväxlande från 2 tabeller
Jag har konsulterat SQL-boken också så det börjar klarna lite...
Jag hittar inget om varför JOIN är snabbare än WHERE, hur funkar det?
/ DavidSv: Skriva ut poster omväxlande från 2 tabeller
Jag hajar... :-)
Men prestandan då?
/ DavidSv: Skriva ut poster omväxlande från 2 tabeller
Får erkänna att jag i början aldrig skrev en enda joinfråga. Använd frågemotorn i Access. Men lärde mig syntaxet för Joins. Det är inte så svårt.
Om man vill använda mer än två tabeller så skiljer sig access från SQL server. I access måste du omge en join utrycken med parantes. Behöver man inte i SQL server.
KAn skrivas på två olika sätt:
SELECT *
FROM (Customers
INNER JOIN Orders ON Customers.CustomerId = Orders.OrderCustomer)
INNER JOIN Details ON Orders.OrderId = Details.DetailOrder
SELECT *
FROM Customers
INNER JOIN (Orders INNER JOIN Details ON Orders.OrderId = Details.DetailOrder)
ON Customers.CustomerId = Orders.OrderCustomerSv: Skriva ut poster omväxlande från 2 tabeller
Så du behöver inte ens använda "avancerad" sql utan kan anropa det direkt och låta accessdatabasen göra jobbet. Du kan förstås göra det i SQL också, Access fråga kan visas i SQL Format, sen är det bara Copy-Paste så är det klart...
MVH Jimmie Pettersson