!weiterhin anfänger! - optionale select bedingung?

hi, habe schon wieder ne frage :slight_smile:

ich benötige von einer anfrage die sich über mehrere tabellen erstreckt eine einzeilige antwort.

das klappt falls alle WHERE bedingungen erfüllt sind. ich würde jedoch ungerne 5 verschieden anfragen machen falls mal eine Tabelle keinen “hit” liefert und somit dann das gesamt ergebniss = leere zeile wäre.

einfachmal ein beispiel :
Tabelle1 : benutzer (hat fremdschlüssel von adresse & kontakt)
Tabelle2 : adresse (optional)
Tabelle3 . kontakt (optional)

ich will auf jedenfall die benutzerdaten auch wenn es keine adresse oder kontakt gibt…wenn alles existiert funktioniert das ja so : (ich weiß, ist bestimmt nicht schön)

 
SELECT be.benutzerid, be.benutzername, ad.adresse, ko.kontakt
FROM benutzer be, adresse ad, kontakt ko
WHERE
be.benutzerid = 1 AND be.adress_id = ad.adress_id AND be.kontakt_id = ko.kontakt_id;

könnt ihr mir da auch weiterhelfen?

Es gibt diverse JOIN-Typen, guggst Du hier:
Coding Horror: A Visual Explanation of SQL Joins


test=*# select * from benutzer ;
 id |   name
----+-----------
  1 | benutzer1
  2 | benutzer2
(2 rows)

test=*# select * from adresse ;
 id | ort
----+------
  2 | ort2
(1 row)

test=*# select b.id, b.name, a.ort, a.id from benutzer b left outer join adresse a on a.id=b.id where b.id=1;
 id |   name    | ort | id
----+-----------+-----+----
  1 | benutzer1 |     |
(1 row)

test=*# select b.id, b.name, a.ort, a.id from benutzer b left outer join adresse a on a.id=b.id where b.id=2;
 id |   name    | ort  | id
----+-----------+------+----
  2 | benutzer2 | ort2 |  2
(1 row)

Andreas

danke klappt - hatte ich mir schon gedacht, war gerade beim lesen -
und wieder einen kleinen syntaxfehler gemacht, falls man mehrere tabellen mit “LEFT OUTER JOIN” verbindet, dann darf man zwischen den verknüpfungen kein komma setzen ^^