我似乎无法解决原因:
SELECT `Title`.`Title`, `FirstName`, `LastName`, `Address1`, `Address2`, `Town`.`Town`, `County`.`County`, `PostalCode`, `Phone1`, `Solo`
FROM `Person`
JOIN `Title` ON `Person`.`Title` = `Title`.`id`
JOIN `Town` ON `Person`.`Town` = `Town`.`id`
JOIN `County` ON `Person`.`County` = `County`.`id`
WHERE `Person`.`Solo`='1'
ORDER BY `LastName` ASC;
Run Code Online (Sandbox Code Playgroud)
返回0结果,(它不应该,至少有5个结果,其中Solo='1')
如果我修改它,取出所有JOINS:
SELECT `Title`, `FirstName`, `LastName`, `Address1`, `Address2`, `Town`, `County`, `PostalCode`, `Phone1`, `Solo`
FROM `Person`
WHERE `Person`.`Solo`='1'
ORDER BY `LastName` ASC;
Run Code Online (Sandbox Code Playgroud)
我得到结果?如果我修改它取出WHERE Person.Solo='1'它也给我结果,但只有2; 在哪里,它应该返回所有行?谁能解释一下?
:)
注意:Solo是一个tinyint,它在所有记录中都等于0或1!
你的连接是严格的,这意味着如果Person没有Title 或 Town 或 Country则不予退还.即使删除整个WHERE子句,也不会得到任何结果.
试试吧LEFT JOIN.
这是对不同类型的连接如何工作的一个很好的解释:SQL连接的可视化解释