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

Swe*_*ter 12 mysql null select

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
Run Code Online (Sandbox Code Playgroud)

以下只获取值为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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

这确实得到了我的帖子值为0以及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
Run Code Online (Sandbox Code Playgroud)

那么我做错了什么?

小智 21

尝试在OR条件上使用parenthasis(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
Run Code Online (Sandbox Code Playgroud)