Frederik Sunne skrev:
> SELECT DISTINCT a.id_projekt FROM projekt a, person_ramme b,
> ramme c WHERE b.initialer='FS' and b.ID_ramme = c.ID_ramme and
> c.ID_projekt = a.id_projekt OR a.initialer = 'FS';
> Jeg kan ikke huske præcedens reglerne for boolske operatorer,
> så jeg ved ikke om det er fordi OR binder svagere end AND.
Hvis du er i tvivl så brug paranteser:
SELECT DISTINCT a.id_projekt
FROM projekt a, person_ramme b, ramme c
WHERE
(
b.initialer='FS'
and b.ID_ramme = c.ID_ramme
and c.ID_projekt = a.id_projekt
)
OR a.initialer = 'FS';
Det ville i mine øjne være lettere at overskue forespørgslen hvis
du brugte eksplicit join:
SELECT DISTINCT p.id_projekt
FROM projekt p LEFT OUTER JOIN ramme r
ON p.id_project = c.ID_project
LEFT OUTER JOIN person_ramme pr
ON r.ID_ramme = pr.ID_ramme
WHERE pr.initialer='FS'
OR p.initialer = 'FS';
Der kan være tilfælde hvor en post fra person_ramme bliver
udelukket på grund af join-forbindelsen, uanset om den har
initialer = 'FS'. Understøtter databasen FULL OUTER JOIN kan man
slippe uden om det.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO -
www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.