如何根据另一个表将布尔值放入 SELECT 操作中?

kac*_*apy 4 sql-server-2005 sql-server

我有两个表:MessageAttachments(代表具有一对多关系的实体类型)如下:

CREATE TABLE message (
    messageId ..., 
    [from]..., 
    [to]..., 
    subject..., 
    body...
);

CREATE TABLE attachments (
    messageId..., 
    filename...
);
Run Code Online (Sandbox Code Playgroud)

我想选择基本消息数据并包含一个位列来表示消息是否有附件。我正在尝试在如下所示的操作中使用 EXISTS:

SELECT  
M.*,
hasAttachments = EXISTS(SELECT AttachmentId 
                          FROM Attachment 
                         WHERE messageId = M.messageId),
FROM Message M
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - 有什么方法可以做我正在寻找的东西?

Mar*_*ian 7

我会用 CASE 语句来做:

select
    m.*,
    hasAttachments = CASE WHEN EXISTS(select * from Attachment where messageId = M.messageId) then 1 else 0 end
from Message M
Run Code Online (Sandbox Code Playgroud)

或者

select distinct 
    m.*,
    hasAttachments = CASE WHEN a.AttachmentId is not null then 1 else 0 end
from Message m
left join Attachment a on a.MessageId = m.MessageId
Run Code Online (Sandbox Code Playgroud)