vergleich ein IDs-Array mit Tabelle in DB
-
sind die IDs zusammen hängend? also 3-100, 50-654 oder sind die durcheinander mit Lücken?
-
SELECT * FROM MyTable WHERE ID IN (SELECT idSpalte FROM ID_TABLE);
Schau dir mal das Statement. Leg dir doch ne ID-Tabelle an mit einer Spalte wo alle IDs drinnen sind und dann benutz das oben stehende Statement. Müsste gehen oder?
-
die ids sind nicht laufend sondern durcheinander.
ich will ncht durch die DB direkt machen.
ich will mit einem programm es schaffen.
ich habe ziemlich mit dem prgramm gemacht und es dauert lang ,weil ich für jede id eine abfrage mache..
ich will, daß ich die ids in einer tbl von einer spalte hochladen dann mit irgend einem pfehl in c++ vergleiche diese splate mit einer spalte in anderer tbl.
-
wo bekommst du denn die IDs her?
-
Die dritte Möglichkeit (außer jede ID einzeln abzufragen oder die IDs in die Datenbank zu schicken, die du ja schon verworfen hast) wäre, mit "SELECT * FROM Tabelle;" alle Datensätze ins Programm zu holen und dann selber nach dem richtigen Datensatz zu suchen.
-
Du kannst die Puffertabelle auch aus deinem Programm raus erstellen, das geht, is null Problemo. Jetzt weis ich aber nicht was aufwendiger ist: 1000 Selects oder oder 1000 Inserts und dann ein geschachteltes Select.
Ansonsten bleibt dir wohl nur übrig, wenn du nicht alles rausholen willst, deine IDs zu ordnen, Bereich zu bilden und diese Bereiche dann abzufragen. Das heißt du musst mehr Logik in dein Programm einbauen.
-
zu CStoll,
Die dritte Möglichkeit (außer jede ID einzeln abzufragen oder die IDs in die Datenbank zu schicken, die du ja schon verworfen hast) wäre, mit "SELECT * FROM Tabelle;" alle Datensätze ins Programm zu holen und dann selber nach dem richtigen Datensatz zu suchen.
habe propiert und zwar alle ids in vector gelegt und die neue ids in anderen vector und beide gegen einander in schleife geschtossen.
ich hatte den ein problem oder mehrere getroffen.- beim lesen alle ids ist er auf falschen speicherplatz getretten und abgestortzt........ziemlich viele ids mehr als 1 milion.
- arbeitesspeicher hat gezeigt genug platz aber in der mitte meldet keine genugende speicher.
blieb mir daß ich jede id einzelne checken
zu Pellaeon
wäre nicht schlecht wenn du mir zeigst wie ich eine puffertabelle erzeuge.
du hast recht mit sortieren. DB liebt die daten sortiert dann geht schneller.
vielleicht baue ich eine temp tbl und lade meine ids rein wie sie sind und dann mit dem programm str->Sort() ..sortiere sie und nochmal die ids einzeln überprüfe.. habe ich auch gemacht und lief ziemlich schneller als ohne sortieren.aber gibt es keine möglichkeit dass ich die ids in der temp tbl laden und mit dem programm sag ihm vergleich die 2 tabellen zusammen. genau wenn ich mit sql abfrage mache.
-
CDatabase::ExecuteSQL("CREATE TABLE ID_PUFFER (id INTEGER)");
->Tabelle mit einer Spalte
Falls es die Tabelle schon gibt, wird ne Exception geworfen, also mach try-catch drum. Also um keine vorhandene zu beeinflussen wird ich mir nen Namen solange erzeugen bis halt keine Exception kommt, was aber wohl eher unwahrscheinlich ist.edit am Ende natürlich DROP TABLE ID_PUFFER machen um sie wieder zu löschen
-
wenn ich die ids einzeln checken dauert vielleicht einestunde.
wenn ich eine normalle sql abfrage direkt mit der DB dauert es nach dem hochladen der ids in tmp tbl etwas sekunden.des wegen frage ich ob es eine möglichkeit gibt , was die DB macht in der Programm zu implementieren, daß das programm die aufgabe an der db weiter gibt und der db mir das ergebnis zurück gibt.
-
kann jemand diese Frage antworten?!!