08. februar 2007 - 08:41Der 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)
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.
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.