Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL-Abfrage funktioniert nicht so richtig (https://www.delphipraxis.net/190052-sql-abfrage-funktioniert-nicht-so-richtig.html)

Luckner 24. Aug 2016 16:57

Datenbank: Firebird • Version: 2.1 • Zugriff über: TQuery

SQL-Abfrage funktioniert nicht so richtig
 
Hallo, Habe eine Artikeltabelle in der u.A. folgende Eigenschaften stehe:
ARTNR | ROHWARENR | PRODUKTION | LIEFERMENGE | STATUS |
-----------------------------------------------------------
001 | 1212 | 0 | 0 |produziert |
-----------------------------------------------------------
002 | 1212 | 0 | 0 | Null |
-----------------------------------------------------------
003 | 1212 | 0 | 0 |produziert |

Hoffe, die Tabelle ist lesbar.

Meine Abfrage lautet: select * from ARTIKEL where ROHWARENR = 1212 AND PRODSTATUS <> '+ QuotedStr('produziert') + ' and PRODUKTION = 0 and LIEFERMENGE = 0

Ergebnis wird in einer Tabelle dargestellt. Leider in diesem Fall gar nichts. Wenn, statt 'Null' 'leer' stehen würde, dann funktioniert die Abfrage.
Was mache ich hier falsch.
Danke, Luckner

mkinzler 24. Aug 2016 17:01

AW: SQL-Abfrage funktioniert nicht so richtig
 
SQL-Code:
select * from ARTIKEL where ROHWARENR = 1212 AND iif( PRODSTATUS is not null, PRODSTATUS, '') <> '''produziert''' and PRODUKTION = 0 and LIEFERMENGE = 0;

Aviator 24. Aug 2016 17:02

AW: SQL-Abfrage funktioniert nicht so richtig
 
Wenn NULL = '' entspricht, dann sollte es so funktionieren.

SQL-Code:
select * from ARTIKEL where ROHWARENR = 1212 AND ((PRODSTATUS <> 'produziert') OR (PRODSTATUS IS NULL)) and PRODUKTION = 0 and LIEFERMENGE = 0
.

EDIT: Roter Kasten wo bist du:?: :roll::roll::roll:
OK. Den Firebird Dialekt kenne ich jetzt nicht so genau. Habe mich mal an MSSQL angelehnt.

dataspider 24. Aug 2016 17:04

AW: SQL-Abfrage funktioniert nicht so richtig
 
anstatt <> nehme man: is distinct from
oder halt coalesce(PRODSTATUS, '')

Frank

Hab aber keine Ahnung, was FB 2.1 schon versteht...

.Phil 24. Aug 2016 17:06

AW: SQL-Abfrage funktioniert nicht so richtig
 
Entweder ein ((PRODSTATUS IS NULL OR) OR (PRODSTATUS <> '+ QuotedStr('produziert') + ')) draus machen oder mit ISNULL/COALESCE abfragen, weiß nicht genau was es bei Firebird da gibt.

Neutral General 24. Aug 2016 17:07

AW: SQL-Abfrage funktioniert nicht so richtig
 
Mach vielleicht mal ein Trim um das STATUS-Feld. Je nachdem welchen Datentyp die Spalte hat füllt FB gerne den nicht gebrauchten Platz mit Leerzeichen auf, sodass dann in der Tabelle statt
Code:
"produziert"
Code:
"produziert       "
steht.

Aviator 24. Aug 2016 17:09

AW: SQL-Abfrage funktioniert nicht so richtig
 
Zitat:

Zitat von Neutral General (Beitrag 1345648)
Mach vielleicht mal ein Trim um das STATUS-Feld. Je nachdem welchen Datentyp die Spalte hat füllt FB gerne den nicht gebrauchten Platz mit Leerzeichen auf, sodass dann in der Tabelle statt
Code:
"produziert"
Code:
"produziert       "
steht.

Er schreibt ja, dass NULL drin steht und nicht "produziert " (mit Leerzeichen).

Neutral General 24. Aug 2016 17:11

AW: SQL-Abfrage funktioniert nicht so richtig
 
Oh hab die Frage falsch verstanden.
Dann gibt es eine einfache Lösung:
Zitat:

select * from ARTIKEL where ROHWARENR = 1212 AND PRODSTATUS is distinct from 'produziert' and PRODUKTION = 0 and LIEFERMENGE = 0
http://www.firebirdsql.org/refdocs/l...-distinct.html

Luckner 24. Aug 2016 17:23

AW: SQL-Abfrage funktioniert nicht so richtig
 
Danke Euch. Habe den Vorschlag vom Aviator genommen und es funktioniert. Habe nicht gedacht, dass '<> produziert' nicht automatisch 'is Null' einschliesst.

Gruß, Luckner

Neutral General 24. Aug 2016 17:25

AW: SQL-Abfrage funktioniert nicht so richtig
 
Zitat:

Zitat von Luckner (Beitrag 1345652)
Danke Euch. Habe den Vorschlag vom Aviator genommen und es funktioniert. Habe nicht gedacht, dass '<> produziert' nicht automatisch 'is Null' einschliesst.

Gruß, Luckner

Wie gesagt.. "is distinct from" ist genau das was du brauchst. Ein <> was NULL einschließt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 2  1 2      

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