Puoi avvolgere sia la stringa con cui stai confrontando sia la stringa contenente l'userid
vuoi far corrispondere in ,
delimitatore in modo da assicurarti di corrispondere a un userid
completo (piuttosto che usare ingenuamente LIKE
senza considerare i delimitatori circostanti e corrispondendo solo a un userid
parziale ). In questo modo:
SELECT *
FROM "USER" u
WHERE EXISTS (
SELECT 1
FROM special_user su
WHERE ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)
Quale, per i dati di esempio:
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:ho cambiato Sally
per aggiungere un peer TimTom1
che non dovrebbe essere abbinato anche se il Tom1
la sottostringa è inclusa.
Quali uscite:
db<>violino qui