我尝试LEFT JOIN一个带有用户表的表。我使用LEFT JOIN因为我仍然想要返回在连接表中没有条目的用户。这是有效的,但任何在联接表中没有条目的条目都会丢失它们的ID(uid)(这就是我链接表格的方式)
我的查询:
$sql = 'SELECT *
FROM `users` cu
LEFT JOIN `product_registrations` cpr
ON cu.uid = cpr.uid';
拥有产品注册的人会按照自己的意愿返回所有内容,但是人们似乎没有丢失他们的uid(结果中显示为null)
我真的输了,赞赏任何建议!
答案 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';
另外,除非有特殊原因,否则请勿使用*。只需使用您需要的字段。