Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi firebird 1.5: eigenartiges verhalten (https://www.delphipraxis.net/70211-firebird-1-5-eigenartiges-verhalten.html)

sancho1980 26. Mai 2006 23:06

Datenbank: firebird • Zugriff über: ibx, ibexpert

firebird 1.5: eigenartiges verhalten
 
hallo

ich habe hier folgenden query:

SQL-Code:
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
jetzt folgende information dazu: ich WEIß, dass wenn ich
: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

Hansa 27. Mai 2006 01:40

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)

webcss 27. Mai 2006 01:41

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:
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
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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz