2016-05-08 6 views
0

WHERE句内で指定された数値および/またはNULL値を許可するSQLクエリを作成しようとしています。ここで私はこれまでに書かれたものです:SQL WHERE is number or 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) 

は、私は上記が動作していない理由は、ので、私は、および/または必要この場合はOR声明、そしてそのことだと思います。私はあなたがSQLでそれを行うことができると思いますが、どうですか? :)

+2

あなたは '= NULL'ではなく' IS NULL'が必要です。 –

答えて

1

あなたはlang_idが属するんどのテーブルIs nullとない= 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

私はなぜそれを試していないのか分かりません。魅力のように働いた。ありがとうございます:-)私はスタックを許可するときに正しいとあなたの質問をマークします:) – simon

+1

古典的な10分。あなたのおかげで.. – scaisEdge

+1

古典的な "SQLの本を読んで、それを学ぶことは決してありません"ということです。これは、コピー/ペーストとSQLのnull処理のような基本を決して説明しないハウツーから知識を集めるときに見逃すものです。 – TomTom

0

を使用する必要がありますか?

LEFT JOINを実行するときは、右側のテーブルの条件をON節に置き、真の左結合動作を取得します。 (WHEREに、あなたはそのOR ... IS NULLを追加する必要がある場合は、そうでなければ、定期的な内部結合結果を得るでしょう。)

lang_idsd_menu_items_value_langに属していると仮定すると、にクエリを調整します

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' 

それが良いプログラミングの練習です常にカラムを修飾するので、カラムがどのテーブルから来るのかを即座に知ることができます。