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

时间:2015-09-24 14:53:43

标签: php mysql join left-join

我尝试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 :(得分:1)

我相信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 :(得分:0)

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

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

答案 2 :(得分: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';

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