- Mitglied seit
- 04.08.2002
- Beiträge
- 1.869
- Reaktionen
- 0
Vielleicht gibt's ja hier jemanden, der ein bisschen mehr Ahnung von Datenbanken hat als ich und mir weiterhelfen würde. Problem ist folgendes:
Ich schreibe ein Programm um Daten aus einer Tabelle einer Sybase-Datenbank auszulesen und anzuzeigen. Die Tabelle besitzt zahlreiche Spalten Column1 bis ColumnN.
In einer GUI kann der User nun Filterkriterien festlegen und dann die Datenbankabfrage starten. Nur solche Zeilen, die den Filterkriterien entsprechen, werden angezeigt.
Die Spalten enthalten alle Textstrings (varchar bzw. char). Die Filterkriterien hierfür kann der User aus verschiedenen Listen auswählen und miteinander verknüpfen, z.B.:
SELECT * FROM myTable WHERE (Col1 = 'bla' OR Col1 = 'blub' OR Col1 = ...) AND (Col2 = 'asdf' OR Col2 = 'wsad' OR ...) AND (Col3 = ...
Ich glaube, das Prinzip ist klar.
Nun zu meinem Problem: Das resultierende SELECT-Statement besteht aus einer ziemlich großen Anzahl an ORs und ANDs. Die Datenbank unterstützt leider nur knapp 255 dieser Tokens pro Selection-Level, d.h. ich muss das Statement irgendwie in mehrere Statements aufsplitten.
Hab mir hierzu schon ein paar Gedanken gemacht, aber bisher noch nix brauchbares gefunden.
Die Billig-Methode wäre natürlich, einfach mehrere SELECT-Statements hintereinander abzufeuern und dann die zurückgelieferten Daten in meiner Applikation auszusortieren bzw. zu mergen. Aber das will ich eigentlich nicht tun, weil erstens die Performance darunter leidet und das zweitens imho Aufgabe der Datenbank ist.
Also: Hat jemand ne Idee, wie ich so eine Abfrage realisieren kann, sprich wie ich das obige SELECT-Statement möglichst geschickt in kleinere Statements zerlegen kann, die ich dann mit einer einzigen SQL-Abfrage abfeuern kann? Nochmal zur Erinnerung: Ich brauche das ganze für ne Sybase, d.h. Datenbankspezifische Befehle für z.B. ne Oracle bringen mich nicht weiter.
Danke schonmal im Voraus.
Gruß
M
Ich schreibe ein Programm um Daten aus einer Tabelle einer Sybase-Datenbank auszulesen und anzuzeigen. Die Tabelle besitzt zahlreiche Spalten Column1 bis ColumnN.
In einer GUI kann der User nun Filterkriterien festlegen und dann die Datenbankabfrage starten. Nur solche Zeilen, die den Filterkriterien entsprechen, werden angezeigt.
Die Spalten enthalten alle Textstrings (varchar bzw. char). Die Filterkriterien hierfür kann der User aus verschiedenen Listen auswählen und miteinander verknüpfen, z.B.:
SELECT * FROM myTable WHERE (Col1 = 'bla' OR Col1 = 'blub' OR Col1 = ...) AND (Col2 = 'asdf' OR Col2 = 'wsad' OR ...) AND (Col3 = ...
Ich glaube, das Prinzip ist klar.
Nun zu meinem Problem: Das resultierende SELECT-Statement besteht aus einer ziemlich großen Anzahl an ORs und ANDs. Die Datenbank unterstützt leider nur knapp 255 dieser Tokens pro Selection-Level, d.h. ich muss das Statement irgendwie in mehrere Statements aufsplitten.
Hab mir hierzu schon ein paar Gedanken gemacht, aber bisher noch nix brauchbares gefunden.
Die Billig-Methode wäre natürlich, einfach mehrere SELECT-Statements hintereinander abzufeuern und dann die zurückgelieferten Daten in meiner Applikation auszusortieren bzw. zu mergen. Aber das will ich eigentlich nicht tun, weil erstens die Performance darunter leidet und das zweitens imho Aufgabe der Datenbank ist.
Also: Hat jemand ne Idee, wie ich so eine Abfrage realisieren kann, sprich wie ich das obige SELECT-Statement möglichst geschickt in kleinere Statements zerlegen kann, die ich dann mit einer einzigen SQL-Abfrage abfeuern kann? Nochmal zur Erinnerung: Ich brauche das ganze für ne Sybase, d.h. Datenbankspezifische Befehle für z.B. ne Oracle bringen mich nicht weiter.
Danke schonmal im Voraus.
Gruß
M


