conrado
Goto Top

MySQL - verknüpfte Abfrage?

Hallo Forum,

ich habe ein Problem mit einer Datenbankabfrage.
Szenario:

Tabelle mitarb:

id name abteilung-id
1 Müller 1
2 Meier 1
3 Schulze 2
4 Beier 3
5 Brand 1


Tabelle abt:

id abtname
1 bla
2 blu
3 bli
4 blo
5 blü
6 blä
7 blö
8 blp
9 blr


Ich brauche alle Abteilungen, die in mitarb vorkommen.
Abteilungen die keinen Eintrag in mitarb haben, sollen also nicht ausgegeben werden.
Die Ausgabe müsste also lauten:

bla
blu
bli


Gibt es da irgendeine verwurschtelte SELECT-Abfrage? Man könnte das in PHP mit einer Schleife etc. lösen, aber wird bei großen Tabelle zu argen Performance-Problemen führen.
Was ich suche wäre eine elegante Lösung.

Hat jemand eine Idee?

Danke im Voraus

Conrad

Content-ID: 65324

Url: https://administrator.de/forum/mysql-verknuepfte-abfrage-65324.html

Ausgedruckt am: 24.12.2024 um 17:12 Uhr

gamma63
gamma63 02.08.2007 um 14:50:16 Uhr
Goto Top
Hallo Conrad

versuch das hier

select distinct a.abtname from mitarb m, abt a where m.abteilung-id=a.id;

Grüße
Gamma
conrado
conrado 02.08.2007 um 15:12:48 Uhr
Goto Top
Hallo Gamma,

hatte zuerst einen Tippfehler, aber nun läuft es. Danke vielmals, habe das System nun auch verstanden und weiss in Zukunft bescheid!

Ein Problem bleibt noch.
Als ich einfach noch alle Zeilen der Tabelle "abt" ausgeben wollte, konnte ich mit $row['id'] auf die Spalte ID der Tabelle abt zugreifen. Nun spielt ja auch noch die Spalte ID der Tabelle "mitarb" dazu. Einfach $row['id'] gibt nun nichts mehr zurück, ich habe es schon mit $row['a.id'] probiert, ohne Erfolg. Ich weiss, dass man mit SELECT id AS id2 etwas umschreiben kann, aber wo kann ich in dieses spezielle Query einsetzen?

Grüße
Conrad
Guenni
Guenni 02.08.2007 um 20:37:49 Uhr
Goto Top
@conrado

Hi,

wenn Tabellen gleiche Spaltennamen haben, mußt du diese
qualifizieren. Z.B.:

"select mitarb.id, abt.id .... usw".

Wenn du dann einen Alias mitgibst, kannst du diesen auch weiterverwenden:

Bei "select mitarb.id as mitarb_id, abt.id as abt_id.... usw". kannst du dann mit
$row[mitarb_id] bzw. $row[abt_id] auf die ID's mittels der Aliase zugreifen.

Gruß
Günni
conrado
conrado 04.08.2007 um 12:24:00 Uhr
Goto Top
Danke auch nochmal an dich Günni, das AS kannte ich, nur war mir nicht ganz klar wo ich es bei diesem Query einsetzen soll. Habe es aber so gelöst bekommen:

select distinct a.abtname,a.id as abteilung_id from mitarb m, abt a where m.abteilung-id=a.id;
SvenGuenter
SvenGuenter 07.08.2007 um 15:56:47 Uhr
Goto Top
Pass nur auf da du mit diesem Select einen Crossjoin machst. Das kann bei komplexeren Sachen zu Problemen führen. Nimm lieber einen Join

Der Select würde dann folgendermaßen aussehen
SELECT abt.abtname FROM abtname INNER JOIN mitarb ON abt.id = mitarb.amteilung-id


Gruß

Sven
conrado
conrado 07.08.2007 um 15:59:29 Uhr
Goto Top
Danke Sven, bei dieser Variante ist auch der Syntax einleuchtender.