Oracle
 sql >> Base de données >  >> RDS >> Oracle

utiliser LIKE et IN avec une sous-requête en sql

Vous pouvez envelopper à la fois la chaîne à laquelle vous faites correspondre et la chaîne contenant le userid vous voulez faire correspondre les , délimiteur afin de vous assurer que vous correspondez à un userid complet (plutôt que d'utiliser naïvement LIKE sans tenir compte des délimiteurs environnants et ne correspondant qu'à un userid partiel ). Comme ceci :

SELECT *
FROM   "USER" u
WHERE  EXISTS (
  SELECT 1
  FROM   special_user su
  WHERE  ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)

Qui, pour les exemples de données :

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;

Remarque :J'ai changé Sally pour ajouter un pair TimTom1 qui ne doit pas correspondre même si le Tom1 la sous-chaîne est incluse.

Qui sort :

db<>violon ici