Puede envolver tanto la cadena con la que está haciendo coincidir como la cadena que contiene el userid desea hacer coincidir en el , delimitador para asegurarse de que coincide con un userid completo (en lugar de usar ingenuamente LIKE sin considerar los delimitadores circundantes y solo haciendo coincidir un userid parcial ). Así:
SELECT *
FROM "USER" u
WHERE EXISTS (
SELECT 1
FROM special_user su
WHERE ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)
Que, para los datos de muestra:
CREATE TABLE "USER" ( UserID, UserPeers, Gender ) AS
SELECT 'Mike', 'Tom1, Bob1', 'M' FROM DUAL UNION ALL
SELECT 'John', 'Tom1, Greg1', 'M' FROM DUAL UNION ALL
SELECT 'Sally', 'Mike1, John1', 'F' FROM DUAL UNION ALL
SELECT 'Sara', 'Sally1, Bob1, TimTom1', 'F' FROM DUAL;
CREATE TABLE special_user ( UserID ) AS
SELECT 'Tom1' FROM DUAL UNION ALL
SELECT 'John1' FROM DUAL;
Nota:cambié Sally para agregar un compañero TimTom1 que no debería coincidir aunque el Tom1 la subcadena está incluida.
Qué salidas:
db<>fiddle aquí