Avatar billede dramsgaard Nybegynder
04. august 2005 - 13:47 Der er 14 kommentarer og
2 løsninger

inner join

Jeg har flg 2 tabeller i en database:
vaerktoj
---------
id (sammensat nøgle)
gruppe (sammensat nøgle)

bemaerkninger
-------------
id (primær nøgle)
vID
vGruppe

Hvordan kan jeg lave en INNER JOIN mellem de to tabeller når BÅDE "id"skal passe med"vID" og "gruppe" skal passe med "vGruppe"
Avatar billede coderdk Praktikant
04. august 2005 - 14:03 #1
SELECT * FROM vaerktoj v INNER JOIN bemaerkninger b ON v.id = b.vID AND v.gruppe = b.vGruppe
Avatar billede softspot Forsker
04. august 2005 - 14:04 #2
Kan det min være således:

SELECT *
FROM vaerktoj AS v INNER JOIN bemaerkninger AS b ON v.id=b.vID AND v.gruppe=b.vGruppe
Avatar billede dramsgaard Nybegynder
04. august 2005 - 14:26 #3
hmm når jeg sætter begge forslag ind i resten af min sql får jeg flg. fejl:
"ODBC driver does not support the requested properties"
Hele min sql ser sådan ud:
strSQL="Select location.*, gruppe.*, locationsValg.locType, bemaerkninger.*, vaerktoj.* from ((vaerktoj inner join gruppe on gruppe.idnr = vaerktoj.gruppe)inner join location on location.id=vaerktoj.location ) AS v INNER JOIN bemaerkninger AS b ON v.id=b.vID AND v.gruppe=b.vGruppe  "&varSQLwhere &varSQLorderBy
Avatar billede dramsgaard Nybegynder
05. august 2005 - 20:39 #4
Hvis jeg bruger flg. får jeg kun poster fra tabellen "vaerktoj" der er relateret i tabellen "bemaerkninger".... hvordan får jeg skrevet alle poster ud fra tabellen vaerktoj???

SELECT * FROM vaerktoj AS v INNER JOIN bemaerkninger AS b ON v.id=b.vID AND v.gruppe=b.vGruppe
Avatar billede coderdk Praktikant
05. august 2005 - 21:48 #5
INNER JOIN vælger jo kun rækker hvor der er en relation mellem de to...
Alle fra vaerktoj? SELECT * FROM vaerktoj ? :)
Avatar billede dramsgaard Nybegynder
05. august 2005 - 23:01 #6
ja men alle poster fra kolonnen "vaerktoj" skal udskrives, og hvis der er en bemærkning fra kolonnen "bemaerkninger" der passer til en af posterne fra vaerktoj skal de også udskrives
Avatar billede softspot Forsker
06. august 2005 - 02:03 #7
SELECT v.*, b.* FROM vaerktoj AS v LEFT JOIN bemaerkninger AS b ON v.id = b.vID AND v.gruppe = b.vGruppe

De rækker fra vaerktoj som ikke har en relateret række i bemaerkninger vil blot returnere NULL i alle bemaerkninger-kolonnerne.
Avatar billede dramsgaard Nybegynder
06. august 2005 - 17:16 #8
SELECT v.*, b.* FROM vaerktoj AS v LEFT JOIN bemaerkninger AS b ON v.id = b.vID AND v.gruppe = b.vGruppe

ja det virker vist meget godt....men kan man så på nogen måde sætte det ind i min anden SQL som indeholder nogle joins i forvejen???

strSQL="Select location.id, location.locID, location.locTypeID, location.navn, gruppe.gruppenavn, gruppe.idnr, locationsValg.locType, locationsValg.locBogstav, vaerktoj.* from ((vaerktoj inner join gruppe on gruppe.idnr = vaerktoj.gruppe)inner join location on location.id=vaerktoj.location ) inner join locationsValg on locationsValg.locationsID = location.locTypeID  "
Avatar billede softspot Forsker
06. august 2005 - 17:23 #9
I så fald vil jeg tro det kunne se således ud:

strSQL="Select location.id, location.locID, location.locTypeID, location.navn, gruppe.gruppenavn, gruppe.idnr, locationsValg.locType, locationsValg.locBogstav, vaerktoj.* from ((vaerktoj inner join gruppe on gruppe.idnr = vaerktoj.gruppe)inner join location on location.id=vaerktoj.location ) inner join locationsValg on locationsValg.locationsID = location.locTypeID LEFT JOIN bemaerkninger ON vaerktoj.id = bemaerkninger.vID AND vaerktoj.gruppe = bemaerkninger.vGruppe "
Avatar billede dramsgaard Nybegynder
06. august 2005 - 20:31 #10
hmm ja næsten, men hvis et værktøj har flere bemærkninger, så bliver det udskrevet det antal gange som der er bemærkninger.

kan man ikke lave det så værktøjet kun bliver udskrevet én gang selvom der er knyttet flere bemærkninger til det, eller er det ikke muligt?
Avatar billede coderdk Praktikant
06. august 2005 - 21:05 #11
Du kan jo i din løkke checke om værktøjet er det samme som i sidste iteration. Hvis det er, så lade være med skrive værktøjet, men kun bemærkningen ud?
Avatar billede dramsgaard Nybegynder
10. august 2005 - 22:31 #12
nå jeg må heller lukke..
coderdk og softspot >> i kan smide et svar hvis i vil ha' point :)
Avatar billede softspot Forsker
10. august 2005 - 22:33 #13
Vil det sige at du ikke fandt en endelig løsning?
Avatar billede softspot Forsker
10. august 2005 - 22:41 #14
Mht. denne bemærkning: "kan man ikke lave det så værktøjet kun bliver udskrevet én gang selvom der er knyttet flere bemærkninger til det, eller er det ikke muligt?"

Jeg antager du mener om man kan lave et select som kun returnerer værktøj een gang sammen med alle relaterede bemærkninger. Umiddelbart vil jeg sige nej, men jeg skal da ikke afvise det 100%, for det kan jo være at der findes en eller anden metode til at samle data på den måde. Dog mener jeg at når du join'er flere tabeller sammen, så vil du få et resultat på række der matcher i de tabeller der join'es. Dvs. 1 række i tabel1 der matcher 10 rækker i tabel2 vil give 10 rækker i resultatet.

Du kan naturligvis håndtere det i ASP men jeg fornemmede ikke det var det du efterspurgte (ellers sig til, så flikker vi da noget sammen :)).
Avatar billede coderdk Praktikant
11. august 2005 - 00:05 #15
Ok :)
Avatar billede dramsgaard Nybegynder
11. august 2005 - 14:44 #16
softspot>> ja det var noget i den retning jeg mente

det med løkken som coderdk foreslog virker fint nok, men hvis jeg skulle benytte det sammen med resten af min kode, ville det betyde at jeg skal lave en hel del om.

Da det ikke er sikkert at det er nødvendigt at benytte det, har jeg derfor valgt at vente med at implementere det til senere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester