0

给定以下查询……</p>

  SELECT   DISTINCT *
  FROM     PAS_Post
  WHERE    post_user_id = 21
  GROUP BY post_post_id 

UNION

  SELECT   DISTINCT PAS_Post.*
  FROM     PAS_Follow LEFT JOIN PAS_Post ON (
             PAS_Follow.folw_followed_user_id = PAS_Post.post_user_id
           )
  WHERE    PAS_Follow.folw_follower_user_id = 21
  GROUP BY post_post_id

ORDER BY post_posted_date DESC

我总是在结果中得到一行只是 NULL,不幸的是我需要在数据中保留一些 NULL 值,因为 Post 的表 (PAS_Post) 包含不同类型的信息。

谁能引导我朝着正确的方向摆脱这个空行。

在此处输入图像描述

我不想或不需要这里的最后一行

4

1 回答 1

2

您在 的第二部分使用(左)外连接UNION,因此任何不满足连接条件的情况都将导致数据来自连接左侧的表(PAS_Follow),但NULL在表的每一列在连接的右侧(PAS_Post);随后仅从后一个表中选择列会NULL导致您观察到的行。因此,最简单的解决方案是使用内连接(完全排除不满足连接条件的记录)。

但是,在您的情况下,您的查询似乎可以通过在连接表的过滤器中使用两个可能的条件而不是 a 来大大简化UNION

SELECT   p.*
FROM     PAS_Post   AS p
    JOIN PAS_Follow AS f ON f.folw_followed_user_id = p.post_user_id
WHERE    p.post_user_id = 21
      OR f.folw_follower_user_id = 21
ORDER BY p.post_posted_date DESC

我已经排除了GROUP BY假设post_post_id是表中的主键(或至少是UNIQUE)的子句PAS_Post。如果该假设不正确,您可能需要重新引入它——但要注意 MySQL 将不确定地选择将从每个组返回的值。

于 2013-05-21T10:09:48.963 回答