Suche über alle Spalten?

Hallo,

kann ich mit SQL eine Art Volltextsuche über alle Spalten einer Tabelle machen? Wenn ja, wie geht das?
Kann man dabei auch irgendwie AND / OR-Operatoren einbauen?

Danke im voraus!

Gruß

Daniel

kann ich mit SQL eine Art Volltextsuche über alle Spalten
einer Tabelle machen? Wenn ja, wie geht das?
Kann man dabei auch irgendwie AND / OR-Operatoren einbauen?

Mit selbigen kannst du das Problem lösen:

SELECT \* FROM tabelle
 WHERE
 ( spalte1 LIKE '%xyz%' )
 OR ( spalte2 LIKE '%xyz%' )

So ein Statement ist aber wenn die Tabellen ein bißchen größer werden sehr, sehr langsam.

Grüße, Robert

Hi,
über sinn oder Unsinn einer solchen Suche ist hier im Forum ein paarmal diskutiert worden. Tenor: laß es.

Eine schlechte Suche, die aber ein bißchen schneller als Roberts Vorschlag gehen dürfte, ginge so:

SELECT \*
 FROM tabelle
 WHERE spalte\_1 || spalte\_2 || ... || spalte\_n LIKE '%xyz%';

Wie gesagt - eigentlich lieber nicht. Entweder Du weißt, wo Du suchen mußt, oder eben nicht.

Gruß

J.

Eine schlechte Suche, die aber ein bißchen schneller als
Roberts Vorschlag gehen dürfte, ginge so:

Hallo Jose,

ist das Standard-SQL?

Grüße, Robert

Eine schlechte Suche, die aber ein bißchen schneller als
Roberts Vorschlag gehen dürfte, ginge so:

Hallo Jose,

ist das Standard-SQL?

Hi,
Ja, nach ANSI-SQL (soviel ich weiß, alle Varianten) ist „||“ der Konkatenations-Operator. Unter Access dürftest Du z.B,. „&“ einsetzen.
Aber egal: was ich hier demonstrieren wollte, ist daß man durch Konkatenantion aller relevanten Spalten die mehrfache LIKE-Klausel durch eine einzige ersetzt wird, was das Ganze enorm beschleunigen dürfte, auch dies unabhängig vom eingesetzten RDBMS. Auf einem Oracle 8.1.6-Server auf SuSe 7.2 wirkt sich das bei einer von mir angelegten Beispieltabelle mit 20 Spalten und 5000 Zeilen (ohne jeden Index) mit etwa 9facher Beschleinigung aus.

Gruß

J.

Volltextsuche mit concat()
Hallo Daniel,

ich habe hiermit ganz gute Erfahrung gemacht:

SELECT \*
FROM tabelle
WHERE concat(' ',spalte\_1,spalte\_2,...,spalte\_n)
LIKE '%xyz%';

Gruss, Tobi

Hi Tobi,

was für eine Funktion ist denn dieses concat genau? Muß ich da noch irgendwas beachten (definitionen, hochkommata) etc., bei mir funzt die Suche nicht so ganz richtig.

Danke.

Daniel

SELECT *
FROM tabelle
WHERE concat(’ ',spalte_1,spalte_2,…,spalte_n)
LIKE ‚%xyz%‘;

Gruss, Tobi

Hier steht die syntax:

http://www.mysql.com/doc/S/t/String_functions.html