我有两个表:projectsuser_licenses

我想从数据库中获取项目的整个列表,以及用户的当前许可证状态。许可证表中有一个用户ID字段,我通过$_SESSION变量检查该值。问题是,他们可能没有许可证,或者未登录的访客可能想查看项目列表。我的问题是:如何始终显示左侧表中的数据,而仅在满足某些条件时才从右侧表中获取该行的数据?

我目前的查询是这样的:

   SELECT Projects.*,
          UserLicenses.*
     FROM Projects
LEFT JOIN UserLicenses ON Projects.id = UserLicenses.project_id
    WHERE UserLicenses.user_id = 12
 ORDER BY name ASC

最佳答案

将任何其他条件添加到左联接的on子句中。它们只会影响连接的表。

  SELECT Projects.*,
          UserLicenses.*
     FROM Projects
LEFT JOIN UserLicenses
       ON Projects.id = UserLicenses.project_id
          and UserLicenses.user_id = 12
          and UserLicences.Question = '6*7'
          and UserLicences.Answer = 42
 ORDER BY name ASC

这将返回没有匹配许可证的项目。

08-25 18:12