MySQL显示值为IS NULL或等于X的行

时间:2012-01-08 03:14:29

标签: mysql select null

userPosts.value可以包含两个值之一:0或1。

我正在将userPosts加入我的帖子表。

我想从我的Posts表中获取userPosts.value = 0的所有帖子以及根本没有任何userPosts.value的所有帖子(因此,NULL)。

以下只为我提供值= 0但没有NULL的帖子:

SELECT * FROM $wpdb->posts
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID)
WHERE userPosts.value != 1
ORDER BY $wpdb->posts.post_date DESC

以下内容仅为我提供了值= NULL的帖子:

SELECT * FROM $wpdb->posts
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID)
WHERE userPosts.value IS NULL
ORDER BY $wpdb->posts.post_date DESC

但这根本不会产生任何结果:

SELECT * FROM $wpdb->posts
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID)
WHERE userPosts.value = 0
AND userPosts.value IS NULL
ORDER BY $wpdb->posts.post_date DESC

这确实让我获得了值为0以及NULL的帖子,但它重复了我的所有NULL帖子三次!

SELECT * FROM $wpdb->posts
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID)
WHERE userPosts.value = 0
OR userPosts.value IS NULL
ORDER BY $wpdb->posts.post_date DESC

那么我做错了什么?

3 个答案:

答案 0 :(得分:21)

尝试在OR条件(userContests.value = 0 OR userContests.value IS NULL)

上使用括号
 SELECT * FROM $wpdb->posts
    LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID)
    WHERE (userContests.value = 0
    OR userContests.value IS NULL)
    ORDER BY $wpdb->posts.post_date DESC

答案 1 :(得分:1)

(x = 0) AND (x is NULL) - 单个字段不能同时为两个值。毫无疑问,你根本没有得到任何结果,因为你已经指定了一个无法满足的条件。

至于查询的其余部分。您使用$wdpd->posts作为源表,但在where子句中使用名为userContests的表。 $ wpdb->帖子是否解析为userContests?如果是这样,为什么要在一个地方使表名动态并在另一个地方硬编码呢?

答案 2 :(得分:1)

您在标题中部分回答了您自己的问题:或者不是AND,但尝试使用DISTINCT

SELECT DISTINCT * FROM $wpdb->posts -- Note "DISTINCT"
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID)
WHERE userContests.value = 0
OR userContests.value IS NULL -- Note "OR"
ORDER BY $wpdb->posts.post_date DESC