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í