2016-05-13 13 views
-3

Ich habe zwei Abfragen. Kein Fehler in diesen Abfragen, nur die Ergebnisse sind unterschiedlich.Warum verschiedene Ergebnisse mit Mysql Abfragen

Abfrage 1

SELECT * FROM notices 
WHERE CURDATE() < end_date 
OR end_date = NULL 
ORDER BY id 

Ergebnis Abfrage One:

enter image description here

Abfrage 2

select * from notices 
where CURDATE() < end_date or end_date='0000-00-00' 
order by id 

Ergebnis Abfrage zwei:

enter image description here

Tabellenstruktur

enter image description here

Frage

Meine Frage ist, warum Abfrage 1 nicht zeigt die gleichen Ergebnisse wie Abfrage 2 zeigt?

+1

Im Wesentlichen Sie fragen, warum zwei unterschiedliche Abfragen zu unterschiedlichen Ergebnissen führen :) In der ersten Abfrage, Sie überprüfen, ob end_date NULL spezifisch ist, während die zweite prüft, ob die end_date auch ist gleich "0000-00-00". –

+0

Aber wenn ich einfüge, benutze ich 'NULL' für das Enddatum, dann speichere es' 0000-00-00'. Also sage ich, dass während der Auswahl, warum es nicht mit 'NULL' arbeitet –

+0

Es klingt jetzt wie die end_date Spalte enthält' NOT NULL DEFAULT '0000-00-00'' in seiner Definition. Das würde bedeuten, dass, wenn eine Zeile in die Datenbank eingefügt wird, "end_date" fehlt, wird stattdessen '0000-00-00' verwendet. Bitte aktualisieren Sie Ihre Frage mit Ihrem Tabellenschema –

Antwort

1

Da NULL ist nicht das Gleiche wie "0000-00-00"

PD: Wenn Sie eine where-Klausel festlegen möchten, und wählen Sie in dem Feld null ist, sollten Sie verwenden "WHERE end_date IS NULL", nicht "WHERE end_date = NULL"

+0

Wenn es nicht dasselbe ist, warum speichert NULL als '0000-00-00'? –

+0

@ HamzaZafeer dann speichern Sie wahrscheinlich NULL falsch, zeigen Sie uns diesen Code. Oder überprüfen Sie dieses Beispiel http://sqlfiddle.com/#!9/4bf612/1 –

+0

Ihre End_Date-Spalte ist nicht Nullable. Ihr ORM oder was auch immer muss einen Standardwert anstelle von NULL speichern – Borjante

0

Aus meiner Sicht unterscheidet sich NULL von dem für Date type.Einige Entwickler verwenden als Standardwert "0000-00-00". Da sowohl NULL als auch 0000-00-00 unterschiedlich sind, sehen Sie zwei verschiedene Resultsets.

prüfen diese default date '0000-00-00 00:00:00' or null

Verwandte Themen