PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WHERE field = ´1´ OR field = ´2´ optimieren


sami
25.11.2001, 01:05
ich habe was in folgender art:

SELECT * FROM user.table WHERE field = ´1´ OR field = ´2´ OR field = ´3´
kann ich das irgendwie optimieren, dass ich sowas hab wie WHERE field ISIN (´1´,´2´,´3´)?
wie lautet da die korrekte syntax?


pate33
29.11.2001, 08:32
SELECT * FROM user.table WHERE field > &acute;1&acute; AND field < &acute;3&acute;

z.b.

sami
29.11.2001, 13:09
jo auf die idee wär ich auch noch gekommen.
war aber nur ein (schlechtes) beispiel.
in der realität sind es weder zahlen noch folgen.

ich weiss, dass es eine funktion wie ISIN gibt, aber ich weiss auch, dass der befehl nicht so lautete. ?(

Ps.: es handelt sich dabei um MSSQL

pate33
29.11.2001, 16:18
es gibt noch

&acute;IN&acute;


mehr hab ich im Oracle K1000 aber auch nicht gefunden...

sami
30.11.2001, 19:48
wie lautet denn die syntax bei IN?

pate33
01.12.2001, 00:28
versuch mal

IN (&acute;1&acute;,&acute;2&acute;,&acute;3&acute;)

bin mir aber nicht sicher... muss nochmal nachlesen, und das geht erst am montag wieder... :(

hast du die werte in einer tabelle stehen, oder sind die fix (dann waeren vllt. subqueries moeglich...)

Trashpilot
11.12.2001, 17:52
select ... where [arg] between [wert1] and [wert2] ...

das was dir vorschwebt geht soweit ich weiß nicht

sami
11.12.2001, 22:19
neinein, ich wollt schon das von silencer

btw, auch damit gehen subqueries, da ja das rückgabeformat genau so ist

@Trashpilot:
aber WHERE zelle < 3 AND zelle > 0 würd gehen

pate33
11.12.2001, 23:47
also ich hab nochmal nachgeschaut... es geht defintiv nur mit subqueries oder between... schade eigentlich...

greetz

pate33
11.12.2001, 23:49
ich hab nochmal nachgeschaut, und es geht definiv nur mit subquery oder between... schade eigentlich....

greetz

sami
12.12.2001, 00:01
was wie? IN geht sehr wohl

entweder IN (&acute;1&acute;, &acute;2&acute;, &acute;3&acute;) oder dann IN (SELECT ...)

btw, das ist doch n subquery, das andre sind joins.
oder was meinst du mit subquery?

pate33
12.12.2001, 08:48
IN funtzt aber nur als stringfunktion... mit zahlen eigentlich net... subquery ist das, was du geschrieben hast... oder eben select * from (select *...

geht auch... da kannst du die zahlen aus der db lesen, wenn die schon drinstehen...

greetz

havalan
12.12.2001, 09:28
IN funzt auch mit Zahlen, die Anführungs und Schlusszeichen sind einfach fakultativ
z.B.

SELECT * FROM tbl_users WHERE (u_nr IN (10, 28, 33))

miss_f
12.01.2002, 20:07
Ich kann mich da noch dunkel an einen Absatz aus dem Serverhandbuch von Oracle 8 erinnern, in dem steht, daß man IN eigentlich nicht benutzen sollte, weil es langsam ist - vor allem, wenn man im Argument von IN eine Query hat, die recht lange dauert. Diese muß nämlich für jedes Record in user.table neu ausgeführt werden.

Einge ganze Liste von OR&acute;s ist natürlich nicht schön, aber für die Datenbank am schnellsten zu verarbeiten. Denn, ist die Bedingung erfürllt, bricht sie die Verarbeitung ab und vergleicht nicht noch die anderen Werte, während sie bei IN, glaube ich, trotzdem durch alles durchgeht.

Wenn Du die Verteilung der Daten kennst, kannst Du auch die Statements dementsprechend hinbiegen, daß Du den Wert, der am öftesten vorkommt, an die erste Stelle bei den OR&acute;s stellst. Das sollte eigentlich auch bei MySQL funktionieren.

Vorallem wenn field einen Index hat, wird die Sache mit OR recht flott.

IN (sql/plsql) selbst erwartet eine Werteliste, getrennt durch &acute;,&acute;, wobei die Werte mit dem Datentyp des zu vergleichenden Feldes übereinstimmen müssen. Ob man jetzt Zahlen, Buchstaben oder was auch immer hat, ist dann egal.
Meine SQL-Erfahrungen beschränken sich leider auf Oracle 8.0.5, aber ich denke, daß sich einiges davon auf andere DBMS umlegen läßt.

sami
15.01.2002, 17:18
jo klar, ne select abfrage in ein IN hinein würd ich ned machen, is performanmässig recht schlecht.
aber wenn du die werte kennst, dann ist das ganz ok
bei mir kommen die werte per form get, da funktionierts bestens.