Oracle
 sql >> Database >  >> RDS >> Oracle

usa LIKE e IN con subquery in sql

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