Delphi-PRAXiS

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 15: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 16: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 16: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 16: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 16: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 16: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 16: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 16: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 16: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 16: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.

Luckner 24. Aug 2016 16:33

AW: SQL-Abfrage funktioniert nicht so richtig
 
Danke Neutral General, werde morgen gleich ausprobieren.

Gruß, Luckner

p80286 24. Aug 2016 16:35

AW: SQL-Abfrage funktioniert nicht so richtig
 
Zitat:

Zitat von Luckner (Beitrag 1345652)
Habe nicht gedacht, dass '<> produziert' nicht automatisch 'is Null' einschliesst.

Ein (SQL-)Datenbankfeld ist leer (NULL) oder nicht leer (not NULL). Nicht leer kann heißen das irgendein Inhalt was auch Leerstrings beinhaltet, vorhanden ist. Wenn Du also auf irgendeinen Inhalt prüfst, dann sind die Felder die NULL enthalten automatisch außen vor.

Gruß
K-H

Luckner 25. Aug 2016 11:18

AW: SQL-Abfrage funktioniert nicht so richtig
 
Danke p80286, habe jetzt verstanden.

Gruß, Luckner


Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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-2025 by Thomas Breitkreuz