Eddie: MySQL-Befehl funktioniert nicht

Hallo allerseits!

Koennt ihr mir sagen, was ich hier falsch mache?

=======
SELECT id, name
FROM regions
WHERE NOT EXISTS
 (SELECT *
  FROM rel
  WHERE regionID = regions.id)

Ich will alle Regionen (aus regions) auswählen, die in der Tabelle rel keine Entsprechung haben. Geht aber nicht!

Danke Euch,
Eddie

  1. Hi,

    Ich will alle Regionen (aus regions) auswählen, die in der Tabelle rel keine Entsprechung haben. Geht aber nicht!

    das würde ich folgendermaßen angehen:

    SELECT
       id,name
    FROM
       regions
    LEFT  JOIN
       rel
    ON
       (regions.id=rel.regionId)
    WHERE
       rel.regionId IS NULL

    Zur Erklärung: wenn du diesen Befehl mal ohne den WHERE-Teil ausführst und zusätzlich noch rel.regionId in das SELECT schreibst, siehst du, dass _alle_ Datensätze aus der Tabelle regions ausgewählt werden (LEFT JOIN) und ihnen im Falle einer Entsprechung in rel die ID aus rel zugeordnet wird. Gibt es diese Entsprechung nicht, wird rel.regionId mit NULL aufgefüllt, was dann nur noch abzufragen ist.

    Gruß,
    Andreas.

    1. Hi Andreas,
      hat perfekt funktioniert und ich hab sogar noch was gelernt. Danke!
      Warum das andere aber nicht funktioniert, ist mir immer noch ein Raetsel. Falls das jemand weiss, koennte er mich sehr gluecklich machen!!! :-)
      Gruss, Eddie

      1. Hallo,

        Warum das andere aber nicht funktioniert, ist mir immer noch ein Raetsel.

        http://www.mysql.de/doc/de/ANSI_diff_Sub-selects.html
        Warte, bis MySQL so etwas unterstützt.

        Falls das jemand weiss, koennte er mich sehr gluecklich machen!!! :-)

        Glücklich? ;-)

        viele Grüße

        Axel

        1. Falls das jemand weiss, koennte er mich sehr gluecklich machen!!! :-)
          Glücklich? ;-)

          Sehr!!!
          Mir ist erst jetzt aufgefallen, dass die Doku, die ich hier hab, fuer SQL ist, nicht fuer MySQL - bisher hatte das nie einen Unterschied gemacht ...
          Danke, Eddie

        2. Halihallo Axel

          Warum das andere aber nicht funktioniert, ist mir immer noch ein Raetsel.
          http://www.mysql.de/doc/de/ANSI_diff_Sub-selects.html
          Warte, bis MySQL so etwas unterstützt.

          Die Doku ist in diesem Bereich etwas out of date.
          http://www.mysql.com/doc/en/Subqueries.html

          Subselects gibt es seit MySQL 4.1, das Warten hat endlich ein
          Ende :-)

          Viele Grüsse

          Philipp

  2. wie sehen dann die tabellen aus ( welche Felder stehen in welchen Tabelle)?