Laden...

Suchen über mehrere Spalten

Erstellt von Letitia L. vor 16 Jahren Letzter Beitrag vor 16 Jahren 924 Views
L
Letitia L. Themenstarter:in
25 Beiträge seit 2006
vor 16 Jahren
Suchen über mehrere Spalten
  • MSSQL Server -

Hallo!

Das Problem hatte ich bis jetzt noch nicht. Ich versuche gerade über eine,
oder mehrere Spalten einer Tabelle eine Suchfunktion zu starten.

Eine Spalte ist klar:

"SELECT Spalte1 FROM Tabelle WHERE Spalte1 = 'Suche1' OR Spalte1 = 'Suche2'"

Wie realisiert man das aber über mehr als eine Spalte, ohne nach "WHERE" jeden
Spaltennamen mehrmals aufzurufen?

Das Problem ist das die Funktion, die den String erzeugt, keine Kenntnis über die
Zeichenfolge vor "WHERE" hat. Die Funktion fügt nur eine "WHERE" Klausel an
oder ein.

Ich möchte also folgendes Konstrukt vermeiden:

"SELECT Spalte1 Spalte2 FROM Tabelle WHERE Spalte1 = 'Suche1' OR Spalte1 = 'Suche2' OR Spalte2 = 'Suche1' OR Spalte2 = 'Suche2'"

Sämtliche Literatur die ich gerade wälze (2 dicke Bücher), drücken sich genau um
dieses Problem.

Vielen Dank fürs durchlesen! =)

...

Habt euch lieb!

432 Beiträge seit 2005
vor 16 Jahren

hi letitia,

folgende gedanken mögen Dir vielleicht weiterhelfen:

Da du mit OR arbeitest, kann das Erzeugen der WHERE-Klausel ja grundsätzlich alle Spalten mit einem Kriterium belegen, egal ob sie in der Auswahlliste erscheinen oder nicht

Was manche nicht wissen, ist, dass der IN-Operator auch so verwendet werden kann, dass das Kriterium in der Spaltenmenge gesucht wird (nicht der Spaltenwert in der Kriterienmenge):
SELECT
*
FROM
PERSON
WHERE (
'Müller' in (Nachnamen, Suchbegriff, Kuerzel)
)
Das mag für Dich ebenfalls von Nutzen sein.

Außerdem könntest Du mit folgendem Trick die Funktion doch die Spalten ermitteln lassen, welche die Abfrage aus der Tabelle abholt:
SELECT
*
FROM
PERSON
WHERE (
1 = 0
)
Ein solches Konstrukt liefert nur die Spaltenstruktur und (natürlich) keine Daten.
Kostet also quasi keine Zeit.
Dann wüsste die Funktion, um welche Spalten es gehen soll.

hth
ron

L
Letitia L. Themenstarter:in
25 Beiträge seit 2006
vor 16 Jahren

hi citizen!

Klingt interresant.
Das mit dem "IN" Operator hatte auf ich mir auch schon überlegt.
Mal sehen, ob ich das umsetze.

Hatte heute Morgen (gegen 05:00 Uhr) meine Funktion fertig. Ich übergeb
einfach die Spaltennamen mit. Das ist umständlich - funktioniert aber fehlerfrei,
und die Performance stimmt)

Interessieren würde mich aber, wie dein 2. Vorschlag gemeint ist.
SELECT
*
FROM
PERSON
WHERE (1 = 0)
Da steh ich jetzt auf dem Schlauch. 1 = 0? Bezieht sich das auf die
vorhergehenden Spaltennamen? Ich weiss ja gar nicht wieviel Spalten, und vor
allem, welche Spalten abgefragt werden. Optimal wäre, wenn einfach in allen
Spalten gesucht wird, unabhängig von den aufgerufenen Spalten.

Trotzdem Vielen Dank!

...

Habt euch lieb!

J
3.331 Beiträge seit 2006
vor 16 Jahren

Interessieren würde mich aber, wie dein 2. Vorschlag gemeint ist.
SELECT * FROM PERSON WHERE (1 = 0)

Das hatte citizen.ron als Gedanke gebracht, damit Du selbst vor dem eigentlichen SELECT prüfen kannst, welche Spalten es überhaupt gibt:

Außerdem könntest Du mit folgendem Trick die Funktion doch die Spalten ermitteln lassen, welche die Abfrage aus der Tabelle abholt:

Das Ergebnis dieser Abfrage liefert z.B. eine DataTable mit 0 Zeilen (wegen der WHERE-Bedingung), aber diese DataTable enthält wegen "Select * " alle Spalten, insb. also alle Spaltennamen der DB-Tabelle.

Gruß Jürgen