嵌套SQL语句中出现错误
有人能帮我修复这个SQL语句吗?我有两张桌子。。。尝试获取表1(c)中所有记录的列表以及表2中匹配记录的计数(如果有)(cp_文档) 谢谢,嵌套SQL语句中出现错误,sql,sql-server,Sql,Sql Server,有人能帮我修复这个SQL语句吗?我有两张桌子。。。尝试获取表1(c)中所有记录的列表以及表2中匹配记录的计数(如果有)(cp_文档) 谢谢, Tracy您只需向SELECT子句添加一个子查询即可。这比加入临时工作台更干净。如果您试图读取其他人的查询以了解计算是如何完成的,那么将从SELECT语句开始。如果select语句指向表别名(例如cp_docs),则需要在FROM子句中查找该表。。。执行计划几乎相同;建议的SELECT子句子查询实际上消除了一个无害的计算定标器步骤 SELECT c.cal
Tracy您只需向SELECT子句添加一个子查询即可。这比加入临时工作台更干净。如果您试图读取其他人的查询以了解计算是如何完成的,那么将从SELECT语句开始。如果select语句指向表别名(例如cp_docs),则需要在FROM子句中查找该表。。。执行计划几乎相同;建议的SELECT子句子查询实际上消除了一个无害的计算定标器步骤
SELECT c.cal_procedure ,
c.description ,
c.active ,
c.create_user ,
c.create_date ,
c.edit_user ,
c.edit_date ,
c.id,
(SELECT COUNT(*) FROM cal_procedure_docs where cal_procedure = c.cal_procedure) AS cpd
FROM cal_procedure c
很难说没有错误消息,但是您的外部连接有几个问题
SELECT TOP 100 c.cal_procedure ,
c.description ,
c.active ,
c.create_user ,
c.create_date ,
c.edit_user ,
c.edit_date ,
c.id,
cp_docs.cpd
FROM cal_procedure c
LEFT OUTER JOIN (select cal_procedure as cp, count(id) as cpd
from cal_procedure_doc
group by cal_procedure) cp_docs
ON cp_docs.cp = c.cal_procedure
现在,在查询中,如果cal_prodcedure_doc表中没有值,则可以在cpd列中获得空值。如果你看Max的答案,你会得到0。如果您想使用当前的方法,但显示的是zero,则需要将cp_docs.cpd包装在合并函数中
coalesce(cp_docs.cpd, 0)
最后,我认为Max的答案更容易阅读,可能也是我写这个查询的方式,因为我认为它更容易阅读。如果表很大,您可能需要检查每个表的性能,以查看其中一个表优于另一个表。也许您需要
外部应用
:
SELECT TOP 100 c.cal_procedure, c.description, c.active, c.create_user,
c.create_date, c.edit_user, c.edit_date, c.id, cp_docs.cpd
FROM cal_procedure c OUTER APPLY
(select count(id) as cpd
from cal_procedure_doc
where cal_procedure = c.cal_procedure
) cp_docs
ORDER BY ? ? ? ;
如果您包含错误消息并标记适当的RDBMS,这将非常有用。
OUTTER-JOIN
。您拼错了“OUTER”,并且没有指定联接是左外联接、右外联接还是完全外联接。选择TOP 100
将只返回100行,您应该使用选择TOP 100%
,或者将TOP 100
一起删除。谢谢@darryls995!非常感谢!非常感谢您这么快的回复!拼写当然重要!我将使用Max的解决方案,但您的解决方案肯定也有效。这更符合原始查询的精神。这是另一个伟大的想法!感谢您花时间回复。
SELECT TOP 100 c.cal_procedure, c.description, c.active, c.create_user,
c.create_date, c.edit_user, c.edit_date, c.id, cp_docs.cpd
FROM cal_procedure c OUTER APPLY
(select count(id) as cpd
from cal_procedure_doc
where cal_procedure = c.cal_procedure
) cp_docs
ORDER BY ? ? ? ;