Du kan radbryta både strängen du matchar mot och strängen som innehåller userid
du vill matcha i ,
avgränsare så att du säkerställer att du matchar ett komplett userid
(istället för att naivt använda LIKE
utan att ta hänsyn till omgivande avgränsare och bara matcha en partiell userid
). Så här:
SELECT *
FROM "USER" u
WHERE EXISTS (
SELECT 1
FROM special_user su
WHERE ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)
Som för exempeldata:
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;
Obs:Jag ändrade Sally
för att lägga till en peer TimTom1
som inte ska matchas även om Tom1
delsträng ingår.
Vilka utgångar:
db<>fiol här