2016-05-08 7 views
0

Ich versuche, eine SQL-Abfrage schreiben, die eine angegebene Anzahl und/oder NULL-Wert innerhalb einer WHERE-Klausel erlauben sollte. Hier ist, was ich bisher geschrieben:SQL WHERE ist Nummer oder Null

SELECT * 
FROM sd_menus a 
LEFT JOIN sd_menu_items b 
ON b.id_menu = a.id 
LEFT JOIN `sd_menu_items_value_lang` c 
ON c.item_id = b.id 
WHERE a.name = 'mainNav' 
AND (lang_id = 2 OR lang_id = NULL) 

Ich denke, dass der Grund, warum die oben nicht funktioniert, weil die OR-Anweisung, und dass in diesem Fall ich brauche Und/Oder. Ich denke du kannst das mit SQL machen, aber wie? :)

+2

Sie brauchen 'IS NULL', nicht' = NULL' –

Antwort

1

Sie müssen Is null verwenden und nicht = null

SELECT * 
FROM sd_menus a 
LEFT JOIN sd_menu_items b 
ON b.id_menu = a.id 
LEFT JOIN `sd_menu_items_value_lang` c 
ON c.item_id = b.id 
WHERE a.name = 'mainNav' 
AND (lang_id = 2 OR lang_id is NULL) 
+0

Ich weiß nicht, warum ich das -.- nicht versucht habe. Lief wie am Schnürchen. Danke :-) Wird deine Frage als richtig markieren, wenn Stapel mir erlauben :) – simon

+1

die klassischen 10 Minuten. Dank dir .. – scaisEdge

+1

Das klassische "nie stört, um ein SQL-Buch zu lesen und es zu lernen" -Dache - das ist das Zeug, das Sie übersehen, wenn Sie Ihr Wissen von Copy/Paste und Howtos sammeln, die Grundlagen wie sql null Handhabung nie erklären. – TomTom

0

Welche Tabelle nicht lang_id gehören?

Wenn Sie LEFT JOIN tun, setzen Sie die Bedingungen der rechten Seitentabelle in die ON-Klausel, um ein echtes linkes Join-Verhalten zu erhalten. (Wenn in WHERE, müssen Sie diese OR ... IS NULL hinzufügen, sonst werden Sie regelmäßig Exklusionsverknüpfung Ergebnis.)

Unter der Annahme, lang_id-sd_menu_items_value_lang gehört, stellen Sie die Abfrage:

SELECT * 
FROM sd_menus a 
LEFT JOIN sd_menu_items b 
ON b.id_menu = a.id 
LEFT JOIN `sd_menu_items_value_lang` c 
ON c.item_id = b.id AND c.lang_id = 2 
WHERE a.name = 'mainNav' 

Es ist gute Programmierpraxis Qualifizieren Sie Spalten immer, damit die Benutzer sofort wissen können, aus welcher Tabelle eine Spalte stammt.