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