Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

use LIKE e IN com subconsulta em sql


Você pode agrupar a string com a qual está correspondendo e a string que contém o userid você deseja corresponder no , delimitador para garantir que você corresponda a um userid completo (em vez de usar ingenuamente LIKE sem considerar os delimitadores circundantes e apenas correspondendo a um userid parcial ). Assim:
SELECT *
FROM   "USER" u
WHERE  EXISTS (
  SELECT 1
  FROM   special_user su
  WHERE  ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)

Que, para os dados de amostra:
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;

Observação:mudei Sally para adicionar um par TimTom1 que não deve ser correspondido mesmo que o Tom1 substring está incluída.

Quais saídas:

db<>fiddle aqui