![]() |
Datenbank: firebird • Zugriff über: ibx, ibexpert
firebird 1.5: eigenartiges verhalten
hallo
ich habe hier folgenden query:
SQL-Code:
jetzt folgende information dazu: ich WEIß, dass wenn ich
select first 1 dic.id
from dicentries dic inner join dskrptlink_dicentries dl on dic.id = dl.id_dicentry inner join dskrpts d on dl.id_dskrpt = d.id where d.asdskrpt = :asdskrptinput and dic.id >= :idin order by dic.id ascending :idin auf 1 und :asdskrptinput auf '^' setze, die gewünschte ergebnis-menge id = 1 sein müsste. wenn icn den query aber in ibexpert abfeuere, fängt der scheinbar an zu suchen als ob es kein morgen gäbe und ich muss ibexpert abschießen. was aber noch viel eigenartiger ist: wenn ich die parameterbelegung beibehalte und die vorletzte zeile abändere auf and dic.id = :idin dann bekomm ich das gewünschte ergebnis (id = 1) sofort. auch wenn ich die gesamte vorletzte zeile auskommentiere kann sich/mir einer das verhalten erklären? danke, martin |
Re: firebird 1.5: eigenartiges verhalten
Glaskugel sagt : Sieht ziemlich nach ungewolltem kartesischem Produkt aus. Denn : 4 Felder sind per JOIN dran beteiligt und die haben wie es aussieht nichts miteinander zu tun. Die WHERE-Klausel besteht aus lediglich einer Einschränkung der Datenmenge. Parameter passen wohl auch nicht recht. Es wird also ziemlich alles unnötige gleich mitgeschleppt. Auf den ersten Blick siehts zumindest mal so aus. Die Tatsache, daß es nötig ist, sogar IBExpert "abzuschießen" : würde das SQL-Statement so stimmen, dann wäre es überflüssig, was abzuschießen. 8)
|
Re: firebird 1.5: eigenartiges verhalten
Ich kann's Dir zwar (um diese Uhrzeit) nicht richtig erklären aber:
im Prinzip kannst du die query auch so machen
SQL-Code:
das Erebnis ist dasselbe. Ausserdom soltest Du bei einem InnerJoin auch die zu joinende Tabelle bzw. deren Join Feld nach innen nehmen, ansonsten wird diese nämlich zum hauptkriterium des joins und damit indefinit. (Wenn ich noch richtig zusammenbringe :freak:
select first 1 dl.id_dicentry
from dskrptlink_dicentries dl inner join dskrpts d on d.id = dl.id_dskrpt where d.asdskrpt = :asdskrptinput and dl.id_dicentry >= :idin order by dl.id_dicentry ascending |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz