Avatar billede askhoej Praktikant
26. maj 2004 - 12:14 Der er 10 kommentarer og
1 løsning

Forespørgsel med join

Hej

Jeg sidder og har lidt problemer med en SQL forespørgsel :-(

Jeg har tre tabeller

* Person *
per_id
per_name

* Company *
com_id
com_name

og

* Person_Company *
pec_per_id
pec_com_id

som knytter de to tabeller Person og Company sammen

Jeg vil nu gerne lave en SQL forespørgsel der udskriver per_name,com_name - hvis der er en relation ellers skal kolonnen være com_name være tom.

Hvordan gøres dette?

/askhoej
Avatar billede arne_v Ekspert
26. maj 2004 - 12:21 #1
SELECT per_name,com_name
FROM (Person LEFT JOIN Person_Company ON per_id=pec_per_id) LEFT JOIN Company ON pec_com_id=com_id

vil jeg tro
Avatar billede askhoej Praktikant
26. maj 2004 - 12:42 #2
Hej Arne det virker perfekt - da jeg plejer at med en lidt anden syntaks (se nedenstående), kunne det være rart at vide hvordan gøres?

tror der mangler nogen */+ foran eller bagved ='tegnet?

SELECT per_name,com_name
FROM person,person_company,company
WHERE per_id = pec_per_id AND
pec_com_id = com_id
Avatar billede arne_v Ekspert
26. maj 2004 - 13:01 #3
Komma adskilte tabeller med = svarer til INNER JOIN

Jeg mener at det er *= som svarer til LEFT JOIN.

Men idag vil jeg anbefale LEFT JOIN, da det er standarden.
Avatar billede arne_v Ekspert
26. maj 2004 - 13:01 #4
og et svar
Avatar billede askhoej Praktikant
26. maj 2004 - 13:07 #5
SELECT per_name,com_name
FROM (Person LEFT JOIN Person_Company ON per_id=pec_per_id) LEFT JOIN Company ON pec_com_id=com_id

Hvordan vil ovenstående se ud med += som LEFT JOIN?

Har prøvet nedenstående men det går ikke:
SELECT per_name,com_name
FROM person,person_company,company
WHERE
per_id *= pec_per_id AND
com_id *= pec_com_id
Avatar billede arne_v Ekspert
26. maj 2004 - 13:15 #6
WHERE
per_id *= pec_per_id AND
pec_com_id *= com_id

måske (er ikke lige ved en SQLServer)
Avatar billede askhoej Praktikant
26. maj 2004 - 13:22 #7
Den går desværre ikke :-(

Query contains an outer-join request that is not permitted.
Avatar billede arne_v Ekspert
26. maj 2004 - 13:29 #8
Kan du ikke bare bruge LEFT JOIN ?

Ellers må jeg eksperimentere lidt med *= syntaxen i aften.
Avatar billede askhoej Praktikant
26. maj 2004 - 13:33 #9
Jo den kan godt bruges nu - men ville meget gerne vide hvordan det gøres med den anden syntaks. så hvis du gider bruge 5 min. på det når du har tid, ville det være perfekt :-)

tak for hjælpen indtil videre
Avatar billede arne_v Ekspert
26. maj 2004 - 21:36 #10
Nu har jeg brugt en halv time på at lave den query med *= og jeg kan ikke
få det til at virke.

Samme fejl som dig uanset hvordan jeg forsøger at gøre det.

Jeg tror der er dømt LEFT JOIN !
Avatar billede askhoej Praktikant
26. maj 2004 - 21:46 #11
okay - tak for indsatsen, jeg har også selv forsøgt alverdens kombinationer uden held. Så jeg arbejder videre med LEFT JOIN.

/askhoej
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
Computerworld tilbyder specialiserede kurser i database-management

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