J'ai deux tables: Message
et Attachments
(qui représentent des types d'entités qui ont une relation unique) comme suit:
CREATE TABLE message (
messageId ...,
[from]...,
[to]...,
subject...,
body...
);
CREATE TABLE attachments (
messageId...,
filename...
);
Je souhaite sélectionner les données du message de base et inclure une colonne de bits pour indiquer si le message a des pièces jointes ou non. J'essaie d'utiliser Exist dans l'opération indiquée ci-dessous:
SELECT
M.*,
hasAttachments = EXISTS(SELECT AttachmentId
FROM Attachment
WHERE messageId = M.messageId),
FROM Message M
Mais cela ne fonctionne pas - quelle est la façon de faire ce que je cherche?
Je le ferais avec une déclaration de cas:
select
m.*,
hasAttachments = CASE WHEN EXISTS(select * from Attachment where messageId = M.messageId) then 1 else 0 end
from Message M
ou alors
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
select
M.*,
CAST(select COUNT(*) from Attachment A where A.messageId = M.messageId) AS bit) AS hasAttachments,
FROM Message M
ou alors
select
M.*,
CAST(hasAttachments AS bit) AS hasAttachments,
FROM
Message M
CROSS APPLY
(select COUNT(*) AS hasAttachments
from Attachment A
where A.messageId = M.messageId) A2