ccc: SQL Abfrage

Hallo,

ich möchte eine Abfrage von meiner Datenbank abfragen, aber ich steh' total auf dem Schlauch wie ich Das schreiben soll. Hier mal meine Datenbanken und das gewünschte Ergebnis:

Tabelle1

id | name | sex | plz
1  | otto | m   | 01234
2  | anne | f   | 45678
3  | ben  | m   | 91011

Tabelle2

id | plz   | ort
1  | 01234 | musterhausen
2  | 01234 | beispielort
3  | 45678 | exampleburg

Ergebnis

name | sex | plz   | ort
otto | m   | 01234 | musterhausen
ben  | m   | 91011 | NULL

in die Abfrage soll berücksichtigt werden:

  • ein Kriterium für die Tabelle 1 (sex = m)
  • ein Kriterium für die Tabelle 2 (ort like 'm%')
  • eine Übereinstimmung der Tabellen (in dem fall die plz)
  • es sollen auf jeden fall alle "m" ausgegeben werden

Ich danke.

  1. Hallo

    ich möchte eine Abfrage von meiner Datenbank abfragen, aber ich steh' total auf dem Schlauch wie ich Das schreiben soll. Hier mal meine Datenbanken und das gewünschte Ergebnis:

    Das ist nur eine Datenbank mit zwei Tabellen :-)

    Tabelle2

    id | plz   | ort
    1  | 01234 | musterhausen
    2  | 01234 | beispielort
    3  | 45678 | exampleburg

    Aha, ein Ort ist also durch seine id genau bestimmt und nicht durch seine PLZ

    Tabelle1

    id | name | sex | plz
    1  | otto | m   | 01234
    2  | anne | f   | 45678
    3  | ben  | m   | 91011

    infolgedessen ist diese Tabelle fehlerhaft. Statt plz müsstest Du eine Spalte haben, in der die id des Ortes aufgeführt ist.

    Ergebnis

    name | sex | plz   | ort
    otto | m   | 01234 | musterhausen
    ben  | m   | 91011 | NULL

    in die Abfrage soll berücksichtigt werden:

    • ein Kriterium für die Tabelle 1 (sex = m)
    • ein Kriterium für die Tabelle 2 (ort like 'm%')
    • eine Übereinstimmung der Tabellen (in dem fall die plz)
    • es sollen auf jeden fall alle "m" ausgegeben werden

    Dieses Ergebnis wäre dann ein einfacher LEFT JOIN (Tabelle1, Tabelle2), siehe </archiv/2005/11/t119395/#m766062>, Rouvens geplanter Feature-Artikel zu Joins.

    Freundliche Grüße

    Vinzenz

  2. yo,

    den fehler, wie die beiden tabellen miteinander verknüpft sind, den hat dir Vinzenz schon gesagt. aber ich will noch mal auf die query eingehen, weil es einen fallstrick mit dem OUTER JOIN gibt. und zwar müssen alle bedingungen der zweiten tabelle mit in die JOIN bedingung.

    SELECT tab1.name, tab1.sex, tab1.plz tab2.ort
    FROM tab1
    LEFT JOIN tab2 ON (tab1.plz = tab2.plz AND ort LIKE 'm%')
    WHERE tab1.sex = 'm'

    Ilja