Neuigkeiten:

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

Mobiles Hauptmenü

Aktualisierung mit INSERT oder UPDATE

Begonnen von T417, April 26, 2011, 12:38:51

⏪ vorheriges - nächstes ⏩

T417

Hallo,

Ich zerbreche mir gerade den Kopf, komme aber irgendwie nicht auf die richtige Idee.

Ich will nur den Inhalt einer Tabelle in eine zweite Tabelle einfügen. Der Inhalt der zweiten Tabelle darf dabei nicht überschreiben werden und es dürfen keine Datensätze doppelt vorkommen.
Das ganze sollte mit UPDATE oder INSERT gelöst werden, aber mein Lösungsversuch mit INSERT scheiterte bereits an meiner Unterabfrage.
Es gibt dabei dummerweise auch keinen Primärschlüssel den man nutzen könnte.

Ich bin schon für die richtige Anleitung dankbar, wie ich vorgehen müsste.


Grüße
T.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

database

Hallo,

in Etwa so sollte es gehen:


SELECT DISTINCT Tabelle.Feld1, Tabelle.Feld2, Tabelle.Feld3 INTO NeueTabelle
FROM Tabelle;


HTH

T417

Der Code sorgt doch nur dafür, das ich die Felder der Tabelle1 in die Tabelle2 schreibe.
Aber mit den Code erstellt er eine neue Tabelle2.
Das ist nicht das Ziel und ich weiß auch nicht inwieweit es mir weiterhelfen soll? ???

Bei mir muss der Inhalt der Tabelle1 in die Tabelle2 geschrieben werden, jedoch nur die Datensätze die in der Tabelle2 nicht schon vorhanden sind. Außerdem darf der Inhalt von Tabelle2 weder überschrieben werden, noch dürfen Datensätze aufgenommen werden, die bereits vorhanden sind.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

ebs17

Wer nicht immer neue Tabellen erzeugen will, sondern die vorhandenen richtig nutzen will, sollte eine Inkonsistenzprüfung beim Anfügen verwenden:
INSERT INTO Zieltabelle (field1, field2, ...)
SELECT Q.field1, Q.field2, ...
FROM Quelltabelle Q
WHERE NOT EXISTS
(SELECT Null
FROM Zieltabelle Z
WHERE Z.keyfield = Q.keyfield)

Hier wird aber noch unterstellt, dass die Quelltabelle selber keine Duplikate enthält. Diese müssten dann zusätzlich unterdrückt werden.

MfGA
ebs

database

Hallo,

ZitatDas ist nicht das Ziel und ich weiß auch nicht inwieweit es mir weiterhelfen soll?
Naja...
ZitatIch will nur den Inhalt einer Tabelle in eine zweite Tabelle einfügen.

Wenn du dann aber ....
Zitatjedoch nur die Datensätze die in der Tabelle2 nicht schon vorhanden sind
... und so weiter benötigst, dann sollte das in der Anfrage auch so drin stehen.

T417

@eps17: Dank dir. Das ist ziemlich genau das was ich brauchte.
@database: Hab deinen letzen Beitrag nicht verstanden.


Ich muss nur noch den Code für einige andere Tabellen anpassen.

Grüße
T.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

database

Hi,

macht nix...

ZitatBei mir muss der Inhalt der Tabelle1 in die Tabelle2 geschrieben werden, jedoch nur die Datensätze die in der Tabelle2 nicht schon vorhanden sind.
Das ging halt soooo aus deiner Anfrage nicht hervor, ich habe daher angenommen, dass du Daten aus einer Tabelle OHNE deren Duplikate in eine weitere Tabelle - eben eine neue - schreiben willst.
Wäre das so in der Anfrage gestanden, hätte dir http://www.donkarl.com?FAQ3.16 sicher weitergeholfen.


T417

Naja, erwähnt hab ich es schon:
ZitatDer Inhalt der zweiten Tabelle darf dabei nicht überschrieben werden
Aber egal.
Es klappt, auch wenn ich keinen Primärschlüssel in der Quelltabelle hatte.
Das ist die Hauptsache. :)
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

T417

Hallo zusammen,

Zu früh gefreut.  :-[
Ich hab jetzt eine andere Tabelle, die keinerlei Primärschlüssel hat und auch keine eindeutig definierte Spalte hat.
Ich müsste hier also jede Spalte überprüfen, ob die ganze Spalte bereits in der Zieltabelle vorhanden ist.
Die Zieltabelle ist zwar eindeutig definiert (mit Primärschlüssel), jedoch nicht die Herkunftstabelle.

Hat jemand hierfür eine Idee.


Grüße
T.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

ebs17

ZitatIch müsste hier also jede Spalte überprüfen, ob die ganze Spalte bereits in der Zieltabelle vorhanden ist.
Wer soll das verstehen? Man kann Feld gegen Feld, aber nicht Spalte gegen Spalte vergleichen.

Was bedeutet "keine eindeutig definierte Spalte"? Tabellen bestehen üblicherweise auch aus Spalten, bei Datenbankspalten (-> Feldern) haben diese einen Namen, einen Datentyp und weitere Eigenschaften (festgelegt in der Tabellendefinition).
(Mir kommt irgendwie das Wort Wolke in den Sinn.)

MfGA
ebs

T417

Ähhh, ich meinte nicht Spalte sondern Zeile.
;D
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

ebs17

ZitatIch müsste hier also jede Zeile überprüfen, ob die ganze Zeile bereits in der Zieltabelle vorhanden ist.
Ganze Zeile heißt dann alles (jedes Feld).
Dann ist nicht ein einzelnes Feld als Schlüssel zu verwenden, sondern eben alle Felder (mit AND verknüpft zu einem zusammengesetzten Schlüssel).

MfGA
ebs

T417

Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

T417

Also irgendwie hab ich da nen Denkfehler drin:

CurrentDb.Execute ("INSERT INTO Haupttabelle(Projekt,Firma)" & "SELECT HT1.Projekt_Nr,HT1.Firma FROM Hilfstabelle HT1 WHERE NOT EXIST(SELECT Null FROM Haupttabelle HT2 WHERE HT2.Projekt AND HT2.Firma=HT1.Projekt_Nr AND HT1.Firma)")

Schönes Kreuzprodukt, aber es fügt nichst ein. Selbst dann nicht wenn die "Haupttabelle" leer ist. ???
Mir gehen langsam die Ideen aus.

Grüße

Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

DF6GL

Hallo,

mindestens so:

..WHERE NOT EXISTS   ( SELECT Null FROM Haupttabelle HT2 WHERE HT2.Projekt = HT1.Projekt_Nr AND HT2.Firma= HT1.Firma)")