Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Vreemd SELECT gedrag Firebird SQL

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,
Probleemstelling:

bij het uitvoeren van onderstaande query's krijg ik plotseling alleen maar orders waarvan het ordernummer hoger is dan 100. de ordernummers 83-99 worden plotseling niet meer geretourneerd.
Hoe kan dit? en hoe los ik dit op?

ik heb de volgende query:

select
m.ORDERNUMMER,
k.BEDRIJF,
K.RIT_A,
k.RIT_B
from
main_orders m,
klanten k,
STATUS_ORDERS s
where
m.leverweek=32 and m.LEVERJAAR=2007 and
k.KLANT_ID=m.KLANT_ID and
s.ORDERNR=m.ORDERNUMMER and
s.STATUS=1


Het resultaat van deze query is een lijst met:

Ordernummer
Rit A
Rit B

DEBUG informatie:

Ordernummers lopen van 80 tot 124, en vallen allemaal in week 32.
Alle referenties naar klanten zijn in orde (k.KLANT_ID=m.KLANT_ID)
Fetch all staat AAN

OPMERKELIJK:

waneer ik achteraan de query de volgende WHERE CLAUSE toevoeg dan krijg ik WEL de orders 83-99 te zien:

select .... where .... AND m.ORDERNUMMER<100

Vermoeden

Het lijkt wel alsof Firebird zelf een filter heeft welke mij de orders boven de 100 retourneerd - ipv alle orders

Iemand bekend met dit probleem?

  • Equator
  • Registratie: April 2001
  • Laatst online: 28-11 20:09

Equator

Crew Council

#whisky #barista

Sort eens op m.ORDERNUMMER ASC :)

Verwijderd

Topicstarter
Equator schreef op dinsdag 31 juli 2007 @ 13:47:
Sort eens op m.ORDERNUMMER ASC :)
maakt geen verschil... nog steeds van ordernummer 100 en hoger

Er worden op dit moment ook orders ingevoerd... en alle nieuwe orders zie ik er keurig bij komen...

echt bizar. ik heb hier normaal nooit problemen mee.

Verwijderd

Topicstarter
kleine toevoeging:

als ik aan de query " AND m.ORDERNUMMER<100" toevoeg krijg ik orders 80 t/m 99
als ik aan de query " AND m.ORDERNUMMER<1000" toevoeg krijg ik orders 100 t/m einde
dus NIET, zoals je zou verwachten, 80 t/m einde!

[ Voor 13% gewijzigd door Verwijderd op 31-07-2007 13:58 ]


  • franssie
  • Registratie: Februari 2000
  • Nu online

franssie

Save the albatross

en 'AND m.ORDERNUMMER>0 dan? krijg je dan t/m 99?

Dit is echt een van de vaagste dingen waar ik in tijden van gehoord gelezen heb. Nog patches etc gedraaid de laatste tijd?

[ Voor 4% gewijzigd door franssie op 31-07-2007 14:03 ]

franssie.bsky.social | 🎸 Niets is zo permanent als een tijdelijke oplossing | Een goed probleem komt nooit alleen | Gibson guitar Fender Guitar God Damn Guitar


Verwijderd

Topicstarter
yup,

ik heb gewoon de laatste versie (2.1) van firebirdsql.org....

en inderdaad.. als ik > 0 ingeef dan geeft ie me tot ordernummer 99

en het gekke is dat dit probleem ontstond toen order 100 werd ingevoerd. De lijst met orders was ineens leeg( de query gaf geen resultaten) maar de data stond nog wel gewoon in de DB

[ Voor 39% gewijzigd door Verwijderd op 31-07-2007 14:12 ]


Verwijderd

Doet hij misschien automatisch iets van paging oid? Meer zou ik ook niet kunnen verzinnen, raar probleem.

  • user109731
  • Registratie: Maart 2004
  • Niet online
En als je begint met een zo simpel mogelijke query? Dus eerst SELECT * FROM STATUS_ORDERS en SELECT * FROM main_orders, en dan telkens iets complexer maken door een extra WHERE-clause toe te voegen, tabellen combineren, * vervangen door de kolommen die je nodig hebt, etc. Misschien dat je zo kunt vinden bij welke tabel of welk commando Firebird de mist in gaat... :)

En ordernummer is gedefinieerd als INTEGER ofzo?

[ Voor 17% gewijzigd door user109731 op 31-07-2007 14:18 ]


  • franssie
  • Registratie: Februari 2000
  • Nu online

franssie

Save the albatross

En > 10 zou dan ook wel bij 99 stoppen.
Wat is in vredesnaam het verschil tussen 99 en 100...
met hierboven : zou ik het eens in de definitie van je order nr zoeken.
/edit : en is orderummer uniek of uniek binnen een week?

[ Voor 14% gewijzigd door franssie op 31-07-2007 14:53 . Reden: vraagje extra ]

franssie.bsky.social | 🎸 Niets is zo permanent als een tijdelijke oplossing | Een goed probleem komt nooit alleen | Gibson guitar Fender Guitar God Damn Guitar


Verwijderd

Topicstarter
ik begrijp dit ook niet helemaal... ik werk al een aantal jaren met Firebird/IB en werk altijd met deze methodieken...

het ordernummer is gewoon een integer die oplopend wordt gevuld dmv een generator in de tabel main_orders. de rest van de tabellen refereren naar dat ordernummer... plain and simple dacht ik zo.

het VREEMDE is gewoon dat hij bij DEZELFDE query bij where clause m.ORDERNUMMER < 100 de nummers 80 tot 100 geeft (wat ik ook verwacht!) maar wanneer ik de 100 verander in 1000 (duizend) dan geeft ie me de nummers 80 tot 100 niet meer maar begint ie bij 100!

Verwijderd

Topicstarter
dus a) data is aanwezig, query klopt (want ik krijg de data als ik zeg ordernummer kleiner dan honderd)

b) bij ZELFDE query, maar dan kleiner dan duizend, krijg ik kleiner dan honderd niet meer te zien

Verwijderd

Topicstarter
franssie schreef op dinsdag 31 juli 2007 @ 14:03:
en 'AND m.ORDERNUMMER>0 dan? krijg je dan t/m 99?

Dit is echt een van de vaagste dingen waar ik in tijden van gehoord gelezen heb. Nog patches etc gedraaid de laatste tijd?
wanneer ik dit doe krijg ik de orders vanaf nummer 100 en hoger te zien..

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Je kunt misschien tijdelijk iets als WHERE ORDERNUMMER < 100 OR ORDERNUMMER = 100 OR ORDERNUMMER > 100 kunnen proberen.
offtopic:
Weet niet of 'Less than or equal to' werkt in deze situatie.

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 26-11 15:50
s.ORDERNR=m.ORDERNUMMER

Zijn deze velden in beide tabellen numeriek? Of misschien 1-tje een varchar :X waardoor een impliciete conversie de mist in gaat ? (leading zero's o.i.d.)

Whatever


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Misschien moet je de sql eens met joins gaan schrijven en dan kijken of je nogsteeds hetzelfde resultaat krijgt? En als S.ORDERNR zoals hierboven genoemd wordt niet integer maar varchar is krijgt je inderdaad wazige resultaten.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
  M.ORDERNUMMER,
  K.BEDRIJF,
  K.RIT_A,
  K.RIT_B
FROM
  MAIN_ORDERS M
LEFT JOIN
  KLANTEN K ON K.KLANT_ID = M.KLANT_ID
LEFT JOIN
  STATUS_ORDERS S ON S.ORDERNR = M.ORDERNUMMER
WHERE
  M.LEVERWEEK=32 
  AND
  M.LEVERJAAR=2007
  AND
  S.STATUS=1

Skill is when luck becomes a habit.


Verwijderd

eek schreef op woensdag 01 augustus 2007 @ 07:32:
Misschien moet je de sql eens met joins gaan schrijven en dan kijken of je nogsteeds hetzelfde resultaat krijgt?
De code die hij post zijn joins ;) Alleen in een andere syntax dan dat jij ze gewent bent. Desalniettemin zijn het gewoon left join's.

[ Voor 36% gewijzigd door Verwijderd op 01-08-2007 09:15 ]


  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Ik zou het toch eens met expliciete left joins proberen, misschien dat er iets mis gaat met het opbouwen van het query plan.

Ik zou je vraag overigens ook stellen op http://tech.groups.yahoo.com/group/firebird-support/ misschien kunnen de ontwikkelaars (of de rest van de Firebird community) je hierbij helpen.

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Krijg je die resultsets rechtstreeks van een DBMS-tool, of zijn dit resultaten die je via een zelf geschreven interface terugkrijgt? M.a.w. ben je zeker dat het aan FB ligt? :)
Pagina: 1