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?
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*/
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.
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.
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.
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.
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 <>''
Ja, verwenden Sie NOT NULL
in Ihrer Abfrage wie folgt.
SELECT *
FROM table
WHERE col IS NOT NULL;
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;