MySQL Union总是返回一行NULL

时间:2013-05-21 09:26:42

标签: mysql null union

给出以下查询......

  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)包含不同类型的信息。

任何人都可以引导我朝正确的方向摆脱这个空行。

enter image description here

我不想或不需要最后一行

1 个答案:

答案 0 :(得分:2)

您在UNION的第二部分使用(左)外连接,因此任何不满足连接条件的情况都会产生连接左侧表格中的数据({ {1}}),但在联接右侧表格的每一列中PAS_FollowNULL);后面只选择后一个表中的列会导致您观察到的PAS_Post行。因此,最简单的解决方案是使用内部联接(完全排除不符合联接条件的记录)。

但是,在您的情况下,通过在连接表上的过滤器中使用两个可能的条件而不是NULL来显示您的查询可以大大简化:

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子句。如果这个假设不正确,你可能想重新引入它 - 但要注意MySQL将不确定地选择将从每个组返回的值。