Kalle: Abfrage über 2 Tabellen

Hi,

habe ein Problem mit einer mySQL-Abfrage über zwei Tabellen.

In Tabelle A stehen Termine, jeder mit Verweis auf einen Ort. Ich möchte die Ortsnummern wissen:

select distinct ort_nr
from  termine

GIBT 4 NUMMERN. Nun möchte ich die Ortsnamen aus Tabelle B holen:

select name
from akt_orte
where nr in
 ( select distinct ort_nr
   from  termine )

DAS MAG ER GAR NICHT. Wenn ich aber die gefundenen Nummern eingebe, klappt es:

select name
from aktorte
where nr in ( 39, 465, 722, 763 )

Was mache ich falsch ?

Liebe Grüße aus Worms,
Kalle

  1. Sorry, Tippfehler bei akt_orte / aktorte

    Die nicht funktionierende Abfrage als KOPIE:

    select ao.nr nr, ao.plz plz, ao.name name from akt_orte ao where ao.nr in ( select distinct tr.ort_nr from termine tr ) order by plz, name

    ANTWORT:

    Warning: 0 is not a MySQL result index in /www/aktivferien.de/home/home_04.php on line 163

  2. Hallo Kalle,

    MySQL unterstuetzt meines Wissen immer noch keine Unterabfragen, also
    Konstrukte wie WHERE nr IN (SELECT ...) . Statt dessen solltest Du mit JOIN arbeiten. Mir ist allerdings nicht ganz klar, welche Daten Du überhaupt mit dem Query beschreiben möchtest. Suchst Du alle Ortnamen, bei denen es eine Relation zu Terminen gibt? Dann probier (ungetestet!):

    SELECT akt_orte.name FROM akt_orte INNER JOIN termine ON (termine.ort_nr = akt_orte.nr)

    Gruß Olaf, Essen

    1. Hallo OLaf,

      danke für den Hinweis auf JOIN:

      SELECT akt_orte.name FROM akt_orte INNER JOIN termine ON (termine.ort_nr = akt_orte.nr)

      Diese Lösung listet einen Ort so oft auf, wie er Termine hat. Ich möchte ihn aber nur EINMAL.

      Folgendes funzt:

      SELECT akt_orte.plz plz, akt_orte.name ort, count(*) ct
       FROM akt_orte
       INNER JOIN termine
       ON ( akt_orte.nr = termine.ort_nr )
       GROUP BY plz, ort

      Kalle.