LIKE
является оператором двух скалярных значений, поэтому он ожидает, что правая сторона будет одним значением. Но запрос возвращает много - так что вы получите ошибку.
Вместо одного LIKE
вам нужно условие EXISTS
(хотя у меня нет SqlServer для проверки синтаксиса), которое проверяет, есть ли в cc
другие комментарии, удовлетворяющие условию LIKE:
...
AND EXISTS (SELECT 1 FROM Comments cc
WHERE cc.PostId = p.Id AND
c.Comment LIKE '%' + cc.CreatedBy + '%')
Еще один способ выразить это - 3-way JOIN:
SELECT p.CreatedBy AS OP, p.Post AS FirstPost, c.Comment AS ShoutOut
FROM Posts p
INNER JOIN Comments c ON p.Id = c.PostId
INNER JOIN Comments cc ON p.Id = cc.PostId
WHERE p.CreatedBy = c.CreatedBy AND
c.Comment LIKE '%' + cc.CreatedBy + '%'
GROUP BY OP, FirstPost, ShootOut
В этой версии требуется GROUP BY, чтобы исключить дублирование, поскольку один ShootOut может быть объединен с несколькими комментариями из cc
одним и тем же автором. Так что это может быть менее эффективно (но для уверенности нужно взглянуть на план запроса).