Jump to content

Einfache SQL Abfrage


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

ich weiß, daß die Lösung ganz einfach sein müsste - habe jedoch leider noch keine Lösung gefunden.

 

Ich möchte bestimmte Felder einer SQL Datenbank exportieren

 

WHERE Artikel.Aktiv=-1 funktioniert Prima (festgelegter Wert).

 

Jetzt möchte ich jedoch, daß hiervon nur die Artikel ausgegeben werden, welche auch eine EAN-Nummer haben, also in folgender Form:

 

WHERE Artikel.Aktiv=-1 AND Artikel.Name!='0'

 

Leider handelt es sich bei dem Feld Name ja nicht um ein numerisches Feld sondern um ein var-Feld.

 

Wie sage ich dem export nun "exportiere mir nur die artikel, wo Artikel.Name nicht leer ist" ? habe es auch schon !='' versucht - was allerdings auch nicht funktionierte.

 

Ich bin über jede Art von Hilfe sehr dankbar!

 

Viele Grüße

 

Star

Link zu diesem Kommentar

Moin,

 

Leider ist der Wert nicht Null - Also es handelt sich um ganz leere Felder

 

NULL ist nicht "null" (0), sondern steht in SQL für ein leeres Feld (kein Wert).

 

Bei IS NOT NULL exportiert er nach wie vor alle Zeilen - Auch die in denen die Variabel leer ist.

 

Dann wird es schwierig, denn in dem Fall scheinen "leere" Felder nicht leer zu sein. Manche Applikationen machen so was leider.

 

Ändere die Abfrage doch bitte mal auf "... WHERE Feld IS NULL". Was wird nun zurückgegeben? Wenn keine Zeile zurückkommt, gibt es keine NULL-Werte, und dann müsste man analysieren, was denn wirklich ein "leeres" Feld kennzeichnet.

 

Gruß, Nils

Link zu diesem Kommentar

Moin,

 

Zitat von d.stegemann

Bei größeren sollte das Union All schneller sein, da anderer Ausführungsplan. ....

 

ist ein bischen offtopic, da die Lösung für den Threadersteller ja schon vorhanden ist

(ich würde es auch mit "WHERE" statt "UNION" lösen, vorallem wenn das Resultat aktualisierbar bleiben muss).

 

Aber ich fand es trotzdem interessant, deswegen hier ein

Beispiel für unterschiedliche Ausführungspläne:

(Beispieldatenbank SQL-Server Northwind):

 

SELECT ProductName FROM Products
WHERE (CategoryID = 1 AND Discontinued = 0) OR (CategoryID = 2 AND Discontinued = 1)
GO
SELECT ProductName FROM Products
WHERE CategoryID = 1 AND Discontinued = 0
UNION ALL
SELECT ProductName FROM Products
WHERE CategoryID = 2 AND Discontinued = 1

 

Hier sieht der Plan der UNION Abfrage (optisch) besser aus, wobei ich kein Experte für Ausführungspläne bin.

Änderd man jedoch die WHERE-Klausel ab, z.B. so:

 

SELECT ProductName FROM Products
WHERE (CategoryID = 1 OR CategoryID = 2)
GO
SELECT ProductName FROM Products
WHERE CategoryID = 1 
UNION ALL
SELECT ProductName FROM Products
WHERE CategoryID = 2 

 

Dann sieht Plan 1 wieder besser aus. Ich denke es hängt von

Menge, abzufragende Spalten, Indizes, uvm. ab.

Ausführungsgeschwindigkeiten habe ich nicht gemessen, da in dieser Größe nicht signifikante Unterschiede vordanden sein sollten (in der Tabelle Product sind nur 77 Zeilen vorhanden).

 

Gruß Kai

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...