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 查询左连接问题的主要内容,如果未能解决你的问题,请参考以下文章