Você pode agrupar a string com a qual está correspondendo e a string que contém o
userid
você deseja corresponder no ,
delimitador para garantir que você corresponda a um userid
completo (em vez de usar ingenuamente LIKE
sem considerar os delimitadores circundantes e apenas correspondendo a um userid
parcial ). Assim:SELECT *
FROM "USER" u
WHERE EXISTS (
SELECT 1
FROM special_user su
WHERE ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)
Que, para os dados de amostra:
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;
Observação:mudei
Sally
para adicionar um par TimTom1
que não deve ser correspondido mesmo que o Tom1
substring está incluída. Quais saídas:
db<>fiddle aqui