【问题标题】:MySQL display rows where value IS NULL or equal to XMySQL 显示值为 NULL 或等于 X 的行
【发布时间】:2012-02-05 04:50:08
【问题描述】:

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

我正在将 userPosts 加入我的 Posts 表。

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

以下只会让我发布 value = 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

以下内容只会让我发布 value = 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

这确实让我发布了 value = 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

那我做错了什么?

【问题讨论】:

    标签: mysql select null


    【解决方案1】:

    尝试在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
    

    【讨论】:

      【解决方案2】:

      您在标题中部分回答了您自己的问题:OR not 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
      

      【讨论】:

        【解决方案3】:

        (x = 0) AND (x is NULL) - 一个字段不能同时是两个值。一点结果都没有,这并不奇怪,因为您指定了一个无法满足的 where 条件。

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

        【讨论】:

          猜你喜欢
          • 2020-04-07
          • 2012-05-25
          • 2016-09-30
          • 1970-01-01
          • 2011-03-31
          • 2012-10-22
          相关资源
          最近更新 更多