Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

in SQL zwei Tabellen verknüpfen

Begonnen von Vertigo, Juni 04, 2019, 20:37:43

⏪ vorheriges - nächstes ⏩

Vertigo

Moin Leute,

irgendwas klappt hier nicht bei mir, ich mache irgendwas falsch.

Es geht um eine Suchmaschine welche Nachnamen, Vornamen, etc. durchsucht, jedoch musste ich den Umständen entsprechend nun zwei Listen für Mitarbeiter anlegen.


sSQL = "SELECT MAPersNr, MANachname, MAVorname, MABetrieb"
sSQL = sSQL & " FROM TblProbandenliste"


in folgendem Code soll er noch
NMANachname, NMAVorname, NMAGebDat, NMABetrieb
in
TblAlleMitarbeiter suchen

Ich versuchte es mit 'And' und 'Union' und einfach mit reinschreiben und alles klappt irgendwie nicht. Bin mir nicht sicher ob ich einfach nur Zeichen falsch setze oder mein Ansatz komplett falsch ist.

Gruß



MzKlMu

Hallo,
Zitatjedoch musste ich den Umständen entsprechend nun zwei Listen für Mitarbeiter anlegen.
warum ?
Das solltest Du unbedingt vermeiden.

Gruß Klaus

ebs17

Suchen, besser Finden, heißt ja, dass man filtern muss. Wenn Du also etwas "reinschreibst", sollte inhaltlich ein Filter beteiligt sein.
Mit freundlichem Glück Auf!

Eberhard

Vertigo

Zitat von: MzKlMu am Juni 05, 2019, 00:06:41
Hallo,
Zitatjedoch musste ich den Umständen entsprechend nun zwei Listen für Mitarbeiter anlegen.
warum ?
Das solltest Du unbedingt vermeiden.

Weil ich eine Mitarbeiterliste aus einem anderen System importiere ich aber zusätzlich andere Mitarbeiter manuell anlegen muss. In der Importliste ist die Personalnummer per Primärkey und in der 'Neuen Mitarbeiterliste' eine fortlaufende Nummer.
Es sind genaugenommen auch zwei verschiedene Betriebe.

------------

Zitat von: ebs17 am Juni 05, 2019, 07:48:28
Suchen, besser Finden, heißt ja, dass man filtern muss. Wenn Du also etwas "reinschreibst", sollte inhaltlich ein Filter beteiligt sein.

Ja das kommt alles danach, aber an dieser Stelle lege ich ja fest woher er die Daten nehmen soll. Ich muss jetzt nur wissen wie ich in diesen Befehl Daten aus zwei Tabellen beziehe.

MzKlMu

Hallo,
die Mitarbeiter gehören in eine Tabelle, wenn Du in beiden TAbellen gleichzeigig suchen willst, so musst Du mit einer Unionabfrage die beiden Tabellen doch zusammenführen, also lieber gleich in einer Tabelle führen.
Primärschlüssel wird dann ein Autowert, die Personalnummer wird indiziert (ohne Duplikate).
Für den Betrieb braucht es ein Feld zur Kennzeichnung.

Sind das immer die gleichen Mitarbeiter die importiert werden, oder sind da auch neue MA enthalten.

Bitte erkläre das mit dem Import mal genauer.
Gibt es in der Importtabelle noch weitere Infos zum MA ?

Gruß Klaus

Vertigo

#5
Gerne :)

Also ich habe eine Mitarbeiterliste aus einem Verwaltungssystem, dort erhalte ich eine Excelliste mit P-Nr, Nachname, Vorname, Abteilung. Diese soll zu Access  importiert werden und muss regelmäßig aktualisiert werden.

Zudem müssen Mitarbeiter auch manuell angelegt werden, diese besitzen aber keine Personalnummer (sind genau genommen von einem anderen Betrieb), da aber die Personalnummer in der Suche und Terminspeicherung als Primärschlüssel fungiert, brauchen sie auch eine eindeutige Nummer.

Edit: Um Verwirrung zu verhindern: Der andere Name war tatsächlich der Name des Verwaltungsprogramms.

MzKlMu

Hallo,
es ändert nichts an meiner Meinung, die Daten gehören in eine Tabelle.
Primärschlüssel wird dann ein Autowert. Damit hast Du für alle Mitarbeiter, egal wo diese herkommen einen gemeinsamen Primärschlüssel.
Über die Personalnummer kann trotzdem gesucht werden.
Alles andere läuft über den Autowert. Die Aktualisierungen werden über die Personalnummer zugeordnet.
Neue Daten (aus einem Import) müssen über eine Anfügeabfrage angefügt werden und erhalten dann über den Autowert wieder automatisch einen Primärschlüssel. In der Anfügeabfrage wird noch ein Kennzeichen für den Betrieb übergeben.
Gruß Klaus

Vertigo

okey.
Schöner ist's natürlich allemal. Aber dann weiß ich gar nicht wie das laufen soll. Wie erstelle ich denn eine Anfügeabfrage?

Bei mir entstand dann immer eine Doppelte Namensliste, wenn ich einen Autowert vergebe und die Personalliste aktualisieren wollte.


Bzw. wäre es eine Lösung wenn man die Exceltabelle sich selbst sein lässt und nur mit Access verknüpft?


Gruß

Vertigo

Moin,

ich habe folgendes schon einmal zusammengebastelt:

INSERT INTO Tbl1 ( 1Nachname, 1Vorname, 1GebDat, 1PersNr, 1Betrieb )
SELECT DISTINCT Tbl2.Name, Tbl2.Vorname, Tbl2.Geburtsdatum, Tbl2.Personalnummer, Tbl2.Betrieb
FROM Tbl2
WHERE (((Tbl2.Personalnummer)<>""));


Aber wie schaffe ich es denn jetzt, dass er nur die 'TBL2.Personalnummer'- Werte anfügt, die sich noch nicht in Tbl1.1PersNr befinden.

Versucht habe ich's mit
- Tbl2.Personalnummer <> Tbl1.1PersNr
- Tbl2.Personalnummer <> (Select Tbl1.1PersNr From Tbl1)
...
in der WHERE Klausel.

Es gibt nur leere Listen oder sagt, dass nur ein Wert wiedergegeben werden kann.
...

Bin überfragt.

Beaker s.a.

@Vertigo
ZitatAber wie schaffe ich es denn jetzt, dass er nur die 'TBL2.Personalnummer'- Werte anfügt, die sich noch nicht in Tbl1.1PersNr befinden.
Indem du dem Feld "tbl1.1PersNr" einen eindeutigen Index spendierst.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Vertigo

Zitat von: Beaker s.a. am Juni 11, 2019, 14:06:16
@Vertigo
ZitatAber wie schaffe ich es denn jetzt, dass er nur die 'TBL2.Personalnummer'- Werte anfügt, die sich noch nicht in Tbl1.1PersNr befinden.
Indem du dem Feld "tbl1.1PersNr" einen eindeutigen Index spendierst.
gruss ekkehard


das verstehe ich nicht. Was für einen Index? In Tabelle 1 ist eine laufende Nummer der Primärschlüssel, aber danach soll er ja nicht suchen. Die Personalnummern sind die Felder, die verglichen werden sollen.

Das ganze ist ja eine Anfügeabfrage, der sollte doch ausloten können welche Werte sich bereits in der Haupttabelle befinden und nur 'neue' Nummern anfügen.

MzKlMu

Hallo,
ein Index ist eindeutig. Es werden dann nur Nummern angefügt die es noch nicht gibt. Indiziere also die Personalnummer (ohne Duplikate).
Gruß Klaus

Vertigo

Zitat von: MzKlMu am Juni 11, 2019, 15:08:05
Hallo,
ein Index ist eindeutig. Es werden dann nur Nummern angefügt die es noch nicht gibt. Indiziere also die Personalnummer (ohne Duplikate).

Das klappt ja eben nicht. Denn in der Zieltabelle sind eben auch Mitarbeiter ohne Personalnummer, dadurch kann ich ja keinen dublikatlosen Index setzen. Oder sehe ich das falsch?



Nochmal kurz die Erklärung des Problems:
Zitat von: Vertigo am Juni 06, 2019, 12:48:00
Gerne :)

Also ich habe eine Mitarbeiterliste aus einem Verwaltungssystem, dort erhalte ich eine Excelliste mit P-Nr, Nachname, Vorname, Abteilung. Diese soll zu Access  importiert werden und muss regelmäßig aktualisiert werden.

Zudem müssen Mitarbeiter auch manuell angelegt werden, diese besitzen aber keine Personalnummer (sind genau genommen von einem anderen Betrieb), da aber die Personalnummer in der Suche und Terminspeicherung als Primärschlüssel fungiert, brauchen sie auch eine eindeutige Nummer.

MzKlMu

Hallo,
ZitatOder sehe ich das falsch?
Ja, ein eindeutiger Index lässt NULL  (=leeres Feld) zu. Der Primärschlüssel nicht.
Gruß Klaus

Vertigo

Zitat von: MzKlMu am Juni 11, 2019, 16:03:56
Ja, ein eindeutiger Index lässt NULL  (=leeres Feld) zu. Der Primärschlüssel nicht.


Tatsache, ich habe vorhin wohl was falsches angeklickt. Vielen Dank :)