首页 文章

如果连接条件失败,则mysql left join不包含ID(null)

提问于
浏览
-1

我正在尝试LEFT JOIN一个带有用户表的表 . 我正在使用LEFT JOIN因为我仍然希望返回在连接表中没有条目的用户 . 这是有效的,但是在连接表中没有条目的任何条目都会丢失它们的ID(uid)(这就是我链接表的方式)

我的查询:

$sql = 'SELECT * 
FROM  `users` cu
LEFT JOIN  `product_registrations` cpr
ON cu.uid = cpr.uid';

拥有产品注册的人会按照自己的意愿返回所有内容,但是人们似乎没有丢失他们的uid(结果中显示为null)

我真的迷路了,任何建议都赞赏!

3 回答

  • 0

    如果没有cpr记录,则cpr.uid将为null . 而不只是使用*,为cu.uid添加别名列名 .

    $sql = 'SELECT `users`.*, `product_registrations`.*, `users`.`uid` as user_id
    FROM  `users` cu
    LEFT JOIN  `product_registrations` cpr
    ON cu.uid = cpr.uid';
    

    另外,除非有特殊原因,否则请勿使用* . 只需使用您需要的字段 .

  • 0

    我相信这就是 LEFT JOIN 死了 . 如果您正在尝试获取 cpr.uid 字段,如果未找到匹配项则为 NULL 但您可以使用 COALESCE() 函数显示默认值,表示缺席

    SELECT cu.*, COALESCE(cpr.uid, -1) 
    FROM  `users` cu
    LEFT JOIN  `product_registrations` cpr
    ON cu.uid = cpr.uid;
    
  • 1

    cpr.uid应为null而不是cu.uid . 如果您阅读cu.uid或cpr-uid,请查看您的逻辑并尝试以下操作:

    SELECT cu.uid as cuid
    FROM  `users` cu
    LEFT JOIN  `product_registrations` cpr
    ON cu.uid = cpr.uid
    

    在我的查询中,您不应该有任何空值

相关问题