it-swarm.com.de

MySQL SELECT nur keine Nullwerte

Ist es möglich, eine select-Anweisung auszuführen, die nur NOT NULL-Werte akzeptiert?

Im Moment benutze ich das:

SELECT * FROM table

Und dann muss ich die Nullwerte mit einer PHP-Schleife herausfiltern.

Gibt es eine Möglichkeit:

SELECT * (that are NOT NULL) FROM table

?

Im Moment, wenn ich * wähle, erhalte ich val1, val2, val3, null, val4, val5, null, null usw., aber ich möchte nur die Werte erhalten, die in meinem Ergebnis nicht null sind. Ist dies möglich, ohne mit einer Schleife zu filtern?

243
bryan sammon

Sie sollten IS NOT NULL verwenden. (Die Vergleichsoperatoren = und <> geben beide UNKNOWN mit NULL auf beiden Seiten des Ausdrucks.)

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

Der Vollständigkeit halber möchte ich erwähnen, dass Sie in MySQL auch null safe equality operator negieren können, dies ist jedoch kein Standard-SQL.

SELECT *
FROM table 
WHERE NOT (YourColumn <=> NULL);

Bearbeitet, um Kommentare wiederzugeben. Es hört sich so an, als ob Ihre Tabelle möglicherweise nicht in der ersten normalen Form vorliegt. In diesem Fall kann eine Änderung der Struktur Ihre Aufgabe erleichtern. Ein paar andere Möglichkeiten, dies zu tun ...

SELECT val1 AS val
FROM  your_table
WHERE val1 IS NOT NULL
UNION ALL
SELECT val2 
FROM  your_table
WHERE val2 IS NOT NULL
/*And so on for all your columns*/

Dies hat den Nachteil, dass die Tabelle für jede Spalte mehrmals gescannt wird. Das wird möglicherweise durch das Folgende vermieden, aber ich habe dies nicht in MySQL getestet.

SELECT CASE idx
         WHEN 1 THEN val1
         WHEN 2 THEN val2
       END AS val
FROM   your_table
        /*CROSS JOIN*/
       JOIN (SELECT 1 AS idx
                   UNION ALL
                   SELECT 2) t
HAVING val IS NOT NULL  /*Can reference alias in Having in MySQL*/
419
Martin Smith

Sie können Zeilen herausfiltern, die einen NULL-Wert in einer bestimmten Spalte enthalten:

SELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT NULL

Wenn Sie Zeilen herausfiltern möchten, die in einer Spalte eine Null enthalten, versuchen Sie Folgendes:

SELECT col1, col2, ..., coln
FROM yourtable
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
-- ...
AND coln IS NOT NULL

Update: Basierend auf Ihren Kommentaren, möchten Sie dies vielleicht?

SELECT * FROM
(
    SELECT col1 AS col FROM yourtable
    UNION
    SELECT col2 AS col FROM yourtable
    UNION
    -- ...
    UNION
    SELECT coln AS col FROM yourtable
) T1
WHERE col IS NOT NULL

Und ich stimme Martin zu, dass Sie, wenn Sie dies tun müssen, wahrscheinlich Ihr Datenbankdesign ändern sollten.

17
Mark Byers
Select * from your_table 
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;

Der einzige Nachteil dieses Ansatzes ist, dass Sie nur 5 Spalten vergleichen können. Danach ist das Ergebnis immer falsch. Ich vergleiche also nur die Felder, die NULL sein können.

12
Alan Chavez

Ich habe diese Lösung gefunden:

Diese Abfrage wählt den letzten Wert ungleich Null für jede Spalte aus.

Beispiel


Wenn Sie einen Tisch haben:

id|title|body
1 |t1   |b1
2 |NULL |b2
3 |t3   |NULL

du kriegst:

title|body
t3   |b2

Abfrage


SELECT DISTINCT (

  SELECT title
  FROM test
  WHERE title IS NOT NULL 
  ORDER BY id DESC 
  LIMIT 1
) title, (

  SELECT body
  FROM test
  WHERE body IS NOT NULL 
  ORDER BY id DESC 
  LIMIT 1
) body
FROM test

Ich hoffe dir zu helfen.

7
porquero

Ich benutze den Befehl \! in MySQL, um NULL-Werte aus der Shell herauszufiltern:

\! mysql -e "SELECT * FROM table WHERE column = 123456\G" | grep -v NULL

Es funktioniert am besten mit einem richtigen .my.cnf, in dem Ihre Datenbank/Ihr Benutzername/Ihr Kennwort angegeben sind. Auf diese Weise müssen Sie Ihr select nur mit \! mysql e und | grep -v NULL umgeben.

2
soulshake

Die folgende Abfrage arbeitet für mich

wenn ich dann den Standardwert der Spalte 'NULL' gesetzt habe

select * from table where column IS NOT NULL

und wenn ich dann nichts voreingestellt habe

select * from table where column <>''
1
Basant

Ja, verwenden Sie NOT NULL in Ihrer Abfrage wie folgt.

SELECT * 
FROM table
WHERE col IS NOT NULL;
0

MYSQL IS NICHT NULL MIT JOINS UND SELECT, INSERT IN, DELETE & LOGICAL OPERATOR LIKE OR, NOT

Using IS NOT NULL On Join Conditions

 SELECT * FROM users 
 LEFT JOIN posts ON post.user_id = users.id 
 WHERE user_id IS NOT NULL;

 Using IS NOT NULL With AND Logical Operator

 SELECT * FROM users 
 WHERE email_address IS NOT NULL 
 AND mobile_number IS NOT NULL;

Using IS NOT NULL With OR Logical Operator

 SELECT * FROM users 
 WHERE email_address IS NOT NULL 
 OR mobile_number IS NOT NULL;
0
Developer