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-Key: 65324

Url: https://administrator.de/contentid/65324

Printed on: May 5, 2024 at 18:05 o'clock

Member: gamma63
gamma63 Aug 02, 2007 at 12:50:16 (UTC)
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
Member: conrado
conrado Aug 02, 2007 at 13:12:48 (UTC)
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
Member: Guenni
Guenni Aug 02, 2007 at 18:37:49 (UTC)
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
Member: conrado
conrado Aug 04, 2007 at 10:24:00 (UTC)
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;
Member: SvenGuenter
SvenGuenter Aug 07, 2007 at 13:56:47 (UTC)
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
Member: conrado
conrado Aug 07, 2007 at 13:59:29 (UTC)
Goto Top
Danke Sven, bei dieser Variante ist auch der Syntax einleuchtender.