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