聚合子查询不产生预期结果

时间:2016-08-22 21:22:51

标签: sql sql-server

我有两张桌子,两者之间有一对多的关系。我的查询有 function update(field){ $('input[name=' + field + ']').val('50000'); //alert (field); } ,我想确定第二个表中是否有符合某些条件的结果。我无法用子查询弄清楚并尝试使用以下代码,但它没有给出您期望的结果。

group by

基本上,我想知道我的邮件(可能包含多个附件)是否包含CASE WHEN (SELECT SUM(CASE WHEN a.ContentId IS NULL THEN 1 ELSE 0 END)) > 0 THEN 1 ELSE 0 END as 'HasAttachments' ContentIdnull大于{{count的任何附件1}}然后我想在0中返回boolean值。

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:1)

CASE WHEN 
        SUM(CASE WHEN a.ContentId IS NULL
                       AND a.message_id IS NOT NULL
                 THEN 1
                 ELSE 0
            END) > 0 
THEN 1 
ELSE 0 
END as HasAttachments

从你的叙述来看,你的内心案例陈述似乎缺少另一个确定何时存在附件的条件。如果您没有将AttachmentTable.message_id IS Not NULL置于第二个条件,那么您将计算不具有任何附件的消息以及那些具有附件但没有内容ID的消息同样的事情。但是添加a.message_id可以限制你从叙述中看起来想要的情况。

答案 1 :(得分:0)

这是我可以用来表达查询的一种方式:

select m.*,
       (case when exists (select 1 from attachments a where a.message_id = m.message_id and content_id is null
                         )
             then 1 else 0
        end) as HasAttachments
from messages m;

目前还不清楚为什么你的查询不起作用,没有其余查询的上下文。