MySQL的价值不相等

时间:2011-08-10 12:26:40

标签: mysql

这是我的代码

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的类别列表

我该如何重写?

3 个答案:

答案 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