Это возможно с рекурсивным общим табличным выражением . Первая часть CTE подберет запись, основанную на image_id. Эту информацию вы можете затем использовать для фильтрации данных, которые соответствуют USER_ID
, но не IMAGE_ID
(поскольку эта запись уже возвращена первой частью запроса.)
;WITH bub (IMAGE_ID, X, Y, WIDTH, HEIGHT, TEXT, USER_ID, DATE)
AS ( SELECT IMAGE_ID, X, Y, WIDTH, HEIGHT, TEXT, USER_ID, DATE
FROM Bubble
WHERE IMAGE_ID = @image_id
UNION
SELECT b.IMAGE_ID, b.X, b.Y, b.WIDTH, b.HEIGHT, b.TEXT, b.USER_ID, b.DATE
FROM Bubble b
JOIN bub bb
ON b.USER_ID = bb.USER_ID
AND b.IMAGE_ID <> bb.IMAGE_ID)
SELECT * FROM bub
Примечание. Требуется ;
перед WITH
. Требуется завершить предыдущий оператор с ;
перед вашим общим выражением таблицы. Помещение ;
перед WITH
менее подвержено ошибкам.