示例场景;比方说,我正在搜索员工和他们的雇主
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是空白的。我不知道如何解决这个问题,所以任何一点都会得到极大的赞赏。非常感谢:(
tblEmployee
的eid
字段不为空,但tblMappings
的eid
字段为空,这是意料之中的事,因为该表中没有匹配的记录。指定要使用的字段而不是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`
tblEmployee
和tblMappings
也包含列eid
,
并且来自CCD_ 9的第二eid自然地覆盖第一eid。
要解决此问题,可以在返回列
您不应该使用SELECT *
。这是个坏习惯。
相反,考虑一下:
SELECT `tblEmployee`.`eid` FROM `tblEmployee`
LEFT JOIN `tblMappings` ON
`tblEmployee`.`eid` = `tblMappings`.`eid`