Problem mit Verknüpfen von 2 Tabellen

xtramen01

Erfahrenes Mitglied
Hallo Leute,

habe ein Problem und komme einfach mal wieder nicht weiter.
Es geht um eine Suche.

Ich möchte aus "ezta_mitarbeiter" alle id's haben, welche die "bezeichnung" "3" aus "ezta_verfuegbarkeit_personal" haben.

Also letztendlich sollen alle Mitarbeiter aufgelistet werden die als "bezeichnung" 3 haben.

Problem ist, dieselben Mitarbeiter können mehrmals die "bezeichnung" 3 haben.

Ich schaffe es zwar das die Mitarbeiter aufgelistet werden mit diesen Bedingungen, aber da es in der Tabelle "ezta_verfuegbarkeit_personal" mehrere Einträge pro Mitarbeiter geben kann, werden diese dann immer auch so oft ausgegeben und nicht nur einmal wie ich es eigentlich möchte.

Ich kenne leider keine Möglichkeit wie man die Abfrage so begrenzen kann das in "ezta_verfuegbarkeit_personal" lediglich dannach gesucht wird ob es da eine Verknüpfung gibt oder nicht....ohne das mir alle EInträge dieser Tabelle aufgelistet werden.

Code:
select * from ezta_mitarbeiter m left join ezta_verfuegbarkeit_personal mv on m.id = mv.mitarbeiter_id where mv.bezeichnung = '3'  order by gruppe, nachname

Code:
CREATE TABLE IF NOT EXISTS `ezta_verfuegbarkeit_personal` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mitarbeiter_id` int(11) NOT NULL,
  `timestamp` varchar(150) NOT NULL,
  `bezeichnung` int(11) NOT NULL,
  `uhrzeit_von` decimal(10,0) NOT NULL,
  `uhrzeit_bis` decimal(10,0) NOT NULL,
  `kunde` int(11) NOT NULL,
  `auftrag` int(11) NOT NULL,
  `bemerkung` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=249 ;

Code:
CREATE TABLE IF NOT EXISTS `ezta_mitarbeiter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mnr` varchar(100) DEFAULT NULL,
  `gruppe` int(11) NOT NULL,
  `anrede` varchar(25) NOT NULL,
  `vorname` varchar(100) DEFAULT NULL,
  `nachname` varchar(100) DEFAULT NULL,
  `telefon` varchar(100) DEFAULT NULL,
  `telefon2` varchar(100) DEFAULT NULL,
  `fax` varchar(100) DEFAULT NULL,
  `fax2` varchar(100) DEFAULT NULL,
  `mobil` varchar(100) DEFAULT NULL,
  `mobil2` varchar(100) DEFAULT NULL,
  `mail` varchar(100) DEFAULT NULL,
  `mail2` varchar(100) DEFAULT NULL,
  `internet` varchar(100) DEFAULT NULL,
  `anschrift` text,
  `kto` varchar(100) DEFAULT NULL,
  `blz` varchar(100) DEFAULT NULL,
  `bname` varchar(100) DEFAULT NULL,
  `iban` varchar(100) DEFAULT NULL,
  `swift` varchar(100) DEFAULT NULL,
  `vereinbarungen` text,
  `notizen` text,
  `eintrittsdatum` date NOT NULL,
  `passfoto` varchar(100) DEFAULT NULL,
  `lohn_vorstellung` decimal(15,2) NOT NULL,
  `lohn_tatsaechlich` decimal(15,2) NOT NULL,
  `geburtsdatum` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;

hat jemand der mich versteht, vielleicht eine Idee?

Gruss und Danke!
 
Zuletzt bearbeitet:
Dann solltest du dich auf die Felder der Mitarbeitertabelle beschränken und mit DISTINCT das ganze eindeutig machen

SQL:
select distinct ezta_mitarbeiter.* 
from ezta_mitarbeiter join .....
 
Zuletzt bearbeitet von einem Moderator:
Danke dir recht herzlich!
Muss mich damit mal näher beschäftigen, denn ich kapier nich ganz warum das so funktioniert.

Gruss
 
Wenndu nur SELECT * machst, nimmt er alle Felder von allen Tabellen die eingebunden sind.
Da in der Tabelle ezta_verfuegbarkeit_personal pro mitarbeiter mehrere Einträge sind, gibts auch mehrere einduetige Zeilen.

Würdest du den DISTINCT (keine doppelten Einträge) auf das SELECT * anwenden, dann würden wegend er Tabelle ezta_verfuegbarkeit_personal immer noch mehrere Zeilen pro Mitarbeiter bleiben. Die Informationen aus ezta_verfuegbarkeit_personal interessieren aber nicht wirklich. Darum beschränken wir uns in der Ausgabe auf die Tabelle ezta_mitarbeiter. Wennman hier die doppelten unterdrückt, kommt das was du willst...
 
Zurück