SQL 查询左连接问题

Posted

技术标签:

【中文标题】SQL 查询左连接问题【英文标题】:SQL Query Left Join Issues 【发布时间】:2014-06-04 23:42:20 【问题描述】:

我要选择一个活动的报名人数,由signup_limit给出,存储在activity_info,以及已经报名的人数,存储在@987654323 @。如果没有人注册,我希望它以注册数为零来计算,但正如我所拥有的那样,它反而完全删除了该行。我尝试使用左外连接,但得到了相同的结果。有什么建议吗?

SELECT info.code, info.signup_limit - COUNT(*) AS swag
     FROM activity_info AS info 
         LEFT OUTER JOIN signups ON info.code = signups.activity_code, variables
WHERE 
    info.code IN (
      SELECT schedule.code FROM schedule,variables WHERE schedule.date = variables.week
    ) AND variables.week = signups.date
GROUP BY signups.activity_code

更新:感谢 cmets 解决了这个问题。谢谢大家!

【问题讨论】:

不要混合显式 JOIN 语法和隐式(逗号)连接语法。事实上,根本不要使用逗号连接语法。 【参考方案1】:

我想这就是你想要的:

SELECT 
    AI.code, 
    (
        AI.signup_limit - 
        (
            SELECT 
                COUNT(*)
            FROM 
                signups AS S
            WHERE 
                S.activity_code = AI.code
        )
    ) AS swag
FROM 
    activity_info AS AI
WHERE
    info.code IN 
    (
        SELECT
            schedule.code 
        FROM 
            schedule INNER JOIN variables ON schedule.date = variables.week
    ) AND 
    variables.week = signups.date

【讨论】:

对这个概念的修改使它起作用。不知道您可以在子查询中引用原始查询中的列。非常感谢。【参考方案2】:

SQL变量中间有一个词。移除以保持良好状态:

SELECT info.code,
       info.signup_limit - count(*) AS swag
FROM activity_info AS info
LEFT OUTER JOIN signups ON info.code = signups.activity_code
WHERE info.code IN
    (SELECT schedule.code
     FROM schedule
     INNER JOIN variables ON schedule.date = variables.week)
  AND variables.week = signups.date
GROUP BY signups.activity_code

【讨论】:

以上是关于SQL 查询左连接问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将在左连接中具有连接的 sql 转换为查询构建器?

左连接 SQL 查询 - MS Access

左连接混淆的 Sql 查询[关闭]

如何在 LINQ 中使用左外连接进行 SQL 查询?

带有大量左连接的 SQL 查询

sql左连接查询多出记录的问题