没有任何匹配的MySql Join表显示空值

时间:2011-03-12 13:57:23

标签: mysql join

嗨,我正试图加入一个像这样的表:

  SELECT
    u.mobile_number,
    u.dob,
    u.gender,
    u.country,
    SUM(b.reward_points) AS points
  FROM users u
  JOIN bookings b ON u.user_id=b.user_id
  WHERE u.user_id=20
  AND b.attended=1
  AND b.review_completed=1
  AND b.date > "2010-03-12"
  AND b.reward_used=0

但是因为预订表没有user_id 20的记录,所以返回的所有列都具有NULL值。我想获取用户的值并返回NULL(当预订表中没有找到相应的行时)。我怎样才能做到这一点?我做错了什么?

3 个答案:

答案 0 :(得分:1)

您需要将表b上的所有条件从WHERE子句移动到ON子句:

  SELECT
    u.mobile_number,
    u.dob,
    u.gender,
    u.country,
    SUM(b.reward_points) AS points
  FROM users u
  LEFT JOIN bookings b 
    ON u.user_id=b.user_id
    AND b.attended=1
    AND b.review_completed=1
    AND b.date > "2010-03-12"
    AND b.reward_used=0
  WHERE u.user_id=20

<强>解释WHERE子句过滤结果,无论您使用何种类型的JOIN,表b中没有匹配的记录都不能满足此表的任何条件,因此查询不会返回它们。 ON子句定义了如何将表b中的记录附加到表u中的记录(因此只有b.attended = 1等等的记录才会被连接)。

答案 1 :(得分:0)

尝试使用INNER JOIN代替JOIN,只有在booking表中有符合条件u.user_id=b.user_id的行时才能加入。

答案 2 :(得分:0)

您可以添加以下条款:

group by u.mobile_number, u.dob, u.gender, u.country

在原始查询的末尾,也使用INNER JOIN而不是JOIN。希望这会有所帮助。