Abfrage über 2 Tabellen
Kalle
- datenbank
0 Kalle0 Olaf Schneider0 Kalle
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
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
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
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.