Вопрос:

Совокупный подзапрос не дает ожидаемых результатов

sql sql-server

26 просмотра

2 ответа

8 Репутация автора

У меня есть две таблицы, и между ними есть отношения один ко многим. Мой запрос имеет, group byи я хочу определить, есть ли какие-либо результаты во 2-й таблице, которые соответствуют некоторым критериям. Я не мог понять это с помощью подзапроса и попробовал следующий код, но он не дает ожидаемых результатов.

CASE WHEN 
        (SELECT SUM(CASE WHEN a.ContentId IS NULL THEN 1 ELSE 0 END)) > 0 
THEN 1 
ELSE 0 
END as 'HasAttachments'

По сути, я пытаюсь выяснить, есть ли в моем сообщении (которое может иметь много вложений) какие-либо вложения, где оно ContentIdесть, nullи если countоно больше, чем 0я хочу вернуть booleanзначение в HasAttachments.

Любая помощь будет отличной!

Автор: hotdiggitydoddo Источник Размещён: 22.08.2016 09:22

Ответы (2)


0 плюса

876751 Репутация автора

Вот один из способов, которым я мог бы сформулировать запрос:

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;

Непонятно, почему ваш запрос не работает без контекста остальной части запроса.

Автор: Gordon Linoff Размещён: 22.08.2016 09:26

1 плюс

10904 Репутация автора

Решение
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, то вы будете считать как сообщения, которые не имеют вложений, так и сообщения, которые имеют вложения, но без идентификатора содержимого, как одно и то же. Но добавляя a.message_id, вы ограничиваете его только тем случаем, который, по-видимому, вы хотите получить из своего повествования.

Автор: Matt Размещён: 22.08.2016 09:35
Вопросы из категории :
32x32