我无法解决这个对 mysql 数据库的查询的小问题
SELECT s.*
FROM section AS s, sectioncompany AS scom
WHERE ((s.restricted = 0 ) OR (s.restricted = 1 AND s.id = scom.sectionId AND scom.companyId = $companyId))
当 sectioncompany 表中有条目时,这可以正常工作并返回结果,但是当该表为空时,查询将不会产生任何结果。目前我通过简单地向 sectioncompany 表添加一个空记录来解决问题,但我想了解我忽略了什么。如您所见,一旦表为空,就不会满足涉及该表中现有值的条件,但它仍应为 s.restricted = 0 返回一些内容,不是吗?我错过了什么?
谢谢
这里的问题是您正在使用 INNER JOIN(通过使用 WHERE 子句来匹配 (s.id = scom.sectionId)。您想要的是 LEFT JOIN:
SELECT s.*
FROM section s
LEFT JOIN sectioncompany scom ON (s.id = scom.sectionId)
WHERE ((s.restricted = 0 ) OR (s.restricted = 1 and scom.companyId = $companyId))
我是一名优秀的程序员,十分优秀!