MySQL LEFT JOIN在第二个表中带有可选值

Boj*_*les 23 mysql sql join

我有两张桌子: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
Run Code Online (Sandbox Code Playgroud)

And*_*mar 42

将任何额外条件添加到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
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢!所以关键是使用ON而不是WHERE.我被困了一段时间,直到找到了这个. (2认同)