Du kan ombryde både den streng, du matcher mod, og den streng, der indeholder userid du vil matche i , afgrænser, så du sikrer, at du matcher et komplet userid (i stedet for naivt at bruge LIKE uden at tage hensyn til de omgivende afgrænsninger og kun matche et delvist userid ). Sådan:
SELECT *
FROM "USER" u
WHERE EXISTS (
SELECT 1
FROM special_user su
WHERE ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)
Hvilket, for eksempeldata:
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;
Bemærk:Jeg har ændret Sally for at tilføje en peer TimTom1 som ikke bør matches, selvom Tom1 understreng er inkluderet.
Hvilken udgang:
db<>fiddle her