这是我的代码
SELECT * FROM categories
LEFT JOIN cat_meta ON cat_meta.cat_id = categories.cat_id
WHERE cat_meta.meta_key = 'Delete'
AND cat_meta.meta_value <> 1
我想要的是检索没有meta_value
为1的所有类别。这可能意味着未设置类别meta_value
,或meta_value = 0
。
相反,我们正在获取已设置至meta_value = 0
的类别列表
我该如何重写?
答案 0 :(得分:1)
一种方法是显式检查NULL(另一种方法是使用NVL(),但我不知道这是否可移植):
SELECT * FROM categories
LEFT JOIN cat_meta ON cat_meta.cat_id = categories.cat_id
WHERE cat_meta.meta_key = 'Delete'
AND (cat_meta.meta_value <> 1 or cat_meta.meta_value is NULL)
注意:这将不返回没有meta_key ='Delete'条目的类别!
答案 1 :(得分:0)
如果meta_value的默认值为NULL,则可以添加
cat_meta.meta_value IS NULL OR cat_meta.meta_value <> 1
答案 2 :(得分:0)
你必须添加一个NULL检查(如果meta_value可以为空):
SELECT * FROM categories
LEFT JOIN cat_meta ON cat_meta.cat_id = categories.cat_id
WHERE cat_meta.meta_key = 'Delete'
AND cat_meta.meta_value IS NULL OR cat_meta.meta_value <> 1