Habe ein Problem mit einer Suche/Abfrage

Werbung:
Sieht jetzt so aus und funktioniert immer noch nicht.... :(

"SELECT * FROM Tabelle WHERE "+
"(coalesce (Spalte1,'') LIKE '" + wert1 + "%') AND "+
"(coalesce (Spalte2,'') LIKE '" + wert2 + "%') AND "+
"(coalesce (Spalte3,'') LIKE '" + wert3 + "%') AND "+
"(coalesce (Spalte4,'') LIKE '" + wert4 + "%') AND "+
"(coalesce (Spalte5,'') LIKE '" + wert5 + "%') AND "+
"(coalesce (Spalte6,'') LIKE '" + wert6 + "%') AND "+
"(coalesce (Spalte7,'') LIKE '" + wert7 + "%')"
 
alsooo das ist ein java Projekt und wert1....7 sind strings wo entweder zu suchende werte drinnen stehen oder halt leer sind also leere strings und nicht NULL.

Also können sie nicht weg. Ich kann es euch auch wieder einfacher aufschreiben.
Rein SQL mäßig sieht es jetzt so aus:

SELECT * FROM Tabelle WHERE
(coalesce (Spalte1,'') LIKE '%') AND
(coalesce (Spalte2,'') LIKE '%') AND
(coalesce (Spalte3,'') LIKE '%') AND
(coalesce (Spalte4,'') LIKE '%') AND
(coalesce (Spalte5,'') LIKE '%') AND
(coalesce (Spalte6,'') LIKE '%') AND
(coalesce (Spalte7,'') LIKE '%')
 
Wenn ich mich recht erinnere funktioniert LIKE unter MySQL nicht mit Integern. Dann wäre zusätzlich noch ein CAST zu CHAR notwendig.

Ob das Problem bei diesen Spalten liegt kannst du aber leicht testen indem du die Spalten testweise aus dem Query entfernst.

ja habe es getestet und die Spalten mal raus genommen. Aber es geht immer noch nicht.
 
Dann solltest du mit dem Basis-Query und einer WHERE-Clause anfangen und Stück für Stück erweitern. So solltest du am ehesten sehen wann ein Problem auftritt.
 
Dann solltest du mit dem Basis-Query und einer WHERE-Clause anfangen und Stück für Stück erweitern. So solltest du am ehesten sehen wann ein Problem auftritt.

Super danke. :)
Habe dadurch tatsächlich herausgefunden das ich ein Fehler in der Spalte1 hatte... fühle mich etwas blöd, denn ich habe einen falschen spaltennamen für spalte1 verwendet. Jetzt funktioniert es schon mal so wie es soll. Nur jetzt habe ich noch das Problem mit den INTEGER'n Spalten.... Wie würde ich die denn jetzt Kasten müssen?

Vielen Dank schon mal für eure Hilfe an diese Stelle, bin gerade echt Glücklich das das schon mal funktioniert.
 
Nur jetzt habe ich noch das Problem mit den INTEGER'n Spalten.... Wie würde ich die denn jetzt Kasten müssen?

Die muß nicht in den Kasten, sondern gecasted werden.

Du hast sowas:

Code:
test=# select 1::int = '1'::text;
ERROR:  operator does not exist: integer = text
LINE 1: select 1::int = '1'::text;
  ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
Time: 121,516 ms

willst aber

Code:
test=*# select 1::int::text = '1'::text;
 ?column?
----------
 t
(1 row)

Aber eigentlich willst Du was ganz was anderes, das weißt Du nur noch nicht. Du willst für alles korrekte Datentypen nehmen, dann muß man nicht casten und kann sich an Dingen wie fehlerfreien Daten und Index-Nutzung bei Selects in großen Tabellen erfreuen.

Ach ja: ich verwende PostgreSQL, die Syntay für MySQL für das Casten kann anders sein. Findest Du in der Doku, gleich neben Datentypen.
 
Werbung:
OMG Ihr müsst echt denken ich bin dumm :D
also es sollte "casten" heißen und nicht Kasten.... das war leider die autokorrekter.... ^^

Die beiden Spalten wo INTEGER drin sind, sind beides foreign keys..... Habt ihr da noch eine Idee? Soll ich die abfrage in den anderen Tabellen stattfinden lassen? Beide sind 1:n Beziehungen.
 
Zurück
Oben