newit1
Goto Top

SQL Null Abfrage

Hallo zusammen,

ich versuche eine CSV in meine Datenbank zu importieren. Das klappt auch.

Die CSV hat folgendes Format:
1;Vorname;Nachname;Ort;

Teilweise steht nicht an jeder Stelle ein Ort in der CSV. Das soll auch so sein.
Bei einer anschließenden SQL Abfrage:
SELECT * FROM `test` WHERE Ort IS NOT NULL

Ich erhalte als Ergebnis alle Einträge. Ich möchte aber gerne nur die Einträge, bei denen ein Ort hinterlegt ist.
Ich denke es liegt an dem NULL.

Was muss ich anpassen, damit das läuft.
Danke für Eure Hilfe!

Content-Key: 626328

Url: https://administrator.de/contentid/626328

Printed on: April 19, 2024 at 17:04 o'clock

Member: wiesi200
wiesi200 Nov 27, 2020 at 11:33:08 (UTC)
Goto Top
Hallo,

das kommt jetzt ein bisschen drauf an. Bei deinem Abfrageerbniss, steht da bei den betroffenen Datensätzen wirklich NULL oder nur kein Text. Denn das sind 2 verschiedene Sachen.
Member: newit1
newit1 Nov 27, 2020 at 11:38:56 (UTC)
Goto Top
Hallo, es steht kein Text dort.
Member: akretschmer
akretschmer Nov 27, 2020 updated at 11:48:29 (UTC)
Goto Top
works for me:


cat /tmp/import.csv
1;Max;Mustermann;
2;Susi;Sorglos;Berlin
3;Hans-Peter;Wurst;Bonn
4;Hans;Meier;


in der DB dann:

test=*# create table newit1 (id int, vorname text, nachname text, ort text);
CREATE TABLE
test=*# copy newit1 from '/tmp/import.csv' csv delimiter ';'; 
COPY 4
test=*# select * from newit1 where ort is null;
 id | vorname |  nachname  | ort 
----+---------+------------+-----
  1 | Max     | Mustermann | 
  4 | Hans    | Meier      | 
(2 rows)

natürlich geht aus:


test=*# select * from newit1 where ort is not null;
 id |  vorname   | nachname |  ort   
----+------------+----------+--------
  2 | Susi       | Sorglos  | Berlin
  3 | Hans-Peter | Wurst    | Bonn
(2 rows)
Member: wiesi200
wiesi200 Nov 27, 2020 at 11:45:46 (UTC)
Goto Top
Dann darfst du auch nicht nach "NULL" Filtern sondern <>''
Member: michi1983
michi1983 Nov 27, 2020 updated at 11:49:07 (UTC)
Goto Top
Hallo,

Zitat von @newit1:

Hallo, es steht kein Text dort.
dann versuch es mit IS NOT NULL or IS NOT ‘‘ (2 hochkomma)

Gruß
michi
Member: newit1
newit1 Nov 27, 2020 updated at 12:25:21 (UTC)
Goto Top
Danke für Eure Hilfe!!

Gebe ich die Daten von Hand ein und mache bei Ort keine Eingabe ersetzt das Programm mit "NULL"
Lade ich die Daten mittels CSV hoch, schreibt das Programm kein "NULL" in die leeren Felder...

Entsprechend ist die SQL Abfrage nur bei den von Hand eingegebenen Werten erfolgreich.
Wie ändere ich das?
Member: michi1983
michi1983 Nov 27, 2020 updated at 12:30:26 (UTC)
Goto Top
Zitat von @newit1:
Entsprechend ist die SQL Abfrage nur bei den von Hand eingegebenen Werten erfolgreich.
Wie ändere ich das?
steht doch mehrfach oben face-smile
Member: newit1
newit1 Nov 27, 2020 at 12:39:35 (UTC)
Goto Top
Tut mir leid ich sehe es nicht face-sad
Member: wiesi200
wiesi200 Nov 27, 2020 at 12:47:53 (UTC)
Goto Top
Zitat von @newit1:

Tut mir leid ich sehe es nicht face-sad

Zitat von @michi1983:

Hallo,

Zitat von @newit1:

Hallo, es steht kein Text dort.
dann versuch es mit IS NOT NULL or IS NOT ‘‘ (2 hochkomma)

Gruß
michi

Und siehst du's jetzt?
Member: newit1
newit1 Nov 27, 2020 at 13:27:34 (UTC)
Goto Top
Ich glaube ich habe mich undeutlich ausgedrückt. Daher die Verdeutlichung.

Inhalt der Datenbank
1

Struktur

2

Ergebnis
3
Member: michi1983
michi1983 Nov 27, 2020 at 13:32:54 (UTC)
Goto Top
nein, du hast deutlich genug ausgedrückt.

aber mit dem Lesen klappts noch nicht so ganz.

SELECT * FROM 'newit1' WHERE ort IS NOT NULL or ort IS NOT ''  
Member: newit1
newit1 Nov 27, 2020 at 13:40:21 (UTC)
Goto Top
Dann ist gut.
Aber bei mir gibt's bei dem Befehl immer einen Syntaxfehler..

sc4
Member: em-pie
Solution em-pie Nov 27, 2020 updated at 13:55:09 (UTC)
Goto Top
Moin,

du hast die Ursache ja schon in Gänze erklärt bekommen.
Beim Import der CSV wird ein Wert ohne Inhalt importiert. Das ist mehr als ein nichts (=NULL)

Um deine Ergebnisse zu erhalten, gibt es wie immer viele Möglichkeiten.

Einer davon ist ja schon genannt worden, wobei hier ein Fehler enthalten ist, den ich hier korrigiert habe:
SELECT * 
FROM test 
WHERE ort is not null OR ort <> ''  

Das or ORT is not '' funktioniert nämlich auch nicht

ICH arbeite jedoch gerne mit
SELECT * 
FROM test 
WHERE NULLIF(ort, '') is not null  

NULLIF greift für mySQL sowie für MS SQL

Gruß
em-pie
Member: michi1983
michi1983 Nov 27, 2020 at 14:00:17 (UTC)
Goto Top
Hi em-pie,

ich kann es natürlich nicht 100% verifizieren, da ich keine DB zur Verfügung habe, aber zumindest bekomme ich auf w3schools keinen Syntaxfehler wie der TO sagt:

bildschirmfoto 2020-11-27 um 14.59.16

Gruß
Michi
Member: newit1
newit1 Nov 27, 2020 at 14:01:43 (UTC)
Goto Top
DANKE! Lösung.


ICH arbeite jedoch gerne mit
> SELECT * 
> FROM test 
> WHERE NULLIF(ort, '') is not null  
> 
Member: em-pie
em-pie Nov 27, 2020 updated at 14:04:28 (UTC)
Goto Top
@michi1983
Deine Syntax ist ja auch richtig face-wink

Oben wurde aber mehrfach
[..] or ort IS NOT ''  
verwendet und das geht nun mal nicht
Member: michi1983
michi1983 Nov 27, 2020 at 14:05:03 (UTC)
Goto Top
ahja, sehe es gerade. mea culpa
Member: em-pie
Solution em-pie Nov 27, 2020 at 14:09:03 (UTC)
Goto Top
@newit1
Kein Problem.

Wenn du es sauber haben willst, jagst du nach dem Import ein UPDATE über die Tabelle, dann ist es einheitlich:

UPDATE mytable
SET ort = NULL
WHERE NULLIF(ort, '') is not null  

Dann ist da auch ein NULL enthalten face-smile