sql >> Databasteknik >  >> RDS >> Oracle

använd LIKE och IN med subquery i sql

Du kan radbryta både strängen du matchar mot och strängen som innehåller userid du vill matcha i , avgränsare så att du säkerställer att du matchar ett komplett userid (istället för att naivt använda LIKE utan att ta hänsyn till omgivande avgränsare och bara matcha en partiell userid ). Så här:

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

Som för exempeldata:

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;

Obs:Jag ändrade Sally för att lägga till en peer TimTom1 som inte ska matchas även om Tom1 delsträng ingår.

Vilka utgångar:

db<>fiol här



  1. Utländska nyckelbegränsningar när data dumpas

  2. Vad är exakt operatorn att jämföra mellan `bigint` och `date` i postgresql?

  3. jQuery Connected Sorterbara listor, spara ordning till MySQL

  4. Oracle.DataAccess missmatchningsfel