mysql在php中留下了带有null的join


mysql left join with nulls in php

示例场景;比方说,我正在搜索员工和他们的雇主

tblEmployee
eid | name
1  | james
2  | harry
tblCompany
cid | name
1  | ABC Ltd
2  | XYZ Corp
tblMappings
mid | eid | cid
1  | 1   | 2

詹姆斯被分配到XYZ公司,但哈利没有分配。我想把所有的员工都拉出来,不管他们是否被分配;

SELECT * FROM `tblEmployee`
LEFT JOIN `tblMappings` ON 
`tblEmployee`.`eid` = `tblMappings`.`eid`

这将在phpMyAdmin中返回以下内容;

eid | name  | mid  | eid  | cid
1   | james | 1    | 1    | 2
2   | harry | NULL | NULL | NULL

我用PHP执行查询,并使用:

while($row=mysql_fetch_assoc($results)) { ...blah.... }

但对哈利来说,$row是空白的。我不知道如何解决这个问题,所以任何一点都会得到极大的赞赏。非常感谢:(

tblEmployeeeid字段不为空,但tblMappingseid字段为空,这是意料之中的事,因为该表中没有匹配的记录。指定要使用的字段而不是SELECT * ...

SELECT e.*, m.mid, m.cid FROM `tblEmployee` e
LEFT JOIN `tblMappings` m ON 
e.`eid` = m.`eid`
SELECT tblEmployee.* FROM `tblEmployee`
LEFT JOIN `tblMappings` ON `tblEmployee`.`eid` = `tblMappings`.`eid`

tblEmployeetblMappings也包含列eid
并且来自CCD_ 9的第二eid自然地覆盖第一eid。

要解决此问题,可以在返回列

中指定表名

您不应该使用SELECT *。这是个坏习惯。

相反,考虑一下:

SELECT `tblEmployee`.`eid` FROM `tblEmployee`
LEFT JOIN `tblMappings` ON 
`tblEmployee`.`eid` = `tblMappings`.`eid`