Avatar billede nayze Nybegynder
08. februar 2007 - 08:41 Der er 1 kommentar og
1 løsning

Hjælp til SQL query

Har fået til opgave at udvide et program, hvor jeg så skal udvide en SQL Query også.

Jeg har i forvejen:
SELECT  OBJECT.OBJECT_ID
FROM    OBJECT INNER JOIN
        PLANE ON OBJECT.OBJECT_ID = PLANE.OBJECT_ID
WHERE  OBJECT.LIBRARY_ID = :id

Nu skal denne SELECT ikke blot selecte de entries i PLANE, der også ligger i OBJECT med det rette library_id, men også tage de entries i CAR, der ligger i OBJECT med den rette library_id.

Jeg troede følgende ville virke, men ak nej:
Select OBJECT.OBJECT_ID
FROM  OBJECT, CAR, PLANE
WHERE  ((OBJECT.OBJECT_ID = PLANE.OBJECT_ID) OR (OBJECT.OBJECT_ID = CAR.OBJECT_ID)) AND (OBJECT.LIBRARY_ID = :id)

Nogen ideer?
Avatar billede trer Nybegynder
08. februar 2007 - 09:17 #1
Tror jeg vil anbefale dig at bruge en union:

SELECT  OBJECT.OBJECT_ID
FROM    OBJECT INNER JOIN
        PLANE ON OBJECT.OBJECT_ID = PLANE.OBJECT_ID
WHERE  OBJECT.LIBRARY_ID = :id
UNION
SELECT  OBJECT.OBJECT_ID
FROM    OBJECT INNER JOIN
        CAR ON OBJECT.OBJECT_ID = CAR.OBJECT_ID
WHERE  OBJECT.LIBRARY_ID = :id

Men du burde også kunne skrive en sammenhængende query med en outer join. Hvad der er bedst afhænger af database motoren og indekseringen.

I øvrigt - den syntaks du troede ville virke er den gamle ansi syntaks fra 80'erne - bruges i dag primært i Oracle og i den er at skrive en outer join rigtig rigtig besværligt. at benytte ansi-92 syntaksen med "inner join" etc er langt at foretrække.
Avatar billede nayze Nybegynder
08. februar 2007 - 12:20 #2
Perfekt, tak for hjælpen!
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