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

brug LIKE og IN med underforespørgsel i sql

Du kan ombryde både den streng, du matcher mod, og den streng, der indeholder userid du vil matche i , afgrænser, så du sikrer, at du matcher et komplet userid (i stedet for naivt at bruge LIKE uden at tage hensyn til de omgivende afgrænsninger og kun matche et delvist userid ). Sådan:

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

Hvilket, for eksempeldata:

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;

Bemærk:Jeg har ændret Sally for at tilføje en peer TimTom1 som ikke bør matches, selvom Tom1 understreng er inkluderet.

Hvilken udgang:

db<>fiddle her



  1. Hvordan forespørger jeg efter alle datoer, der er større end en bestemt dato i SQL Server?

  2. Pivottabel og sammenkædning af kolonner

  3. Hvordan kan jeg bruge mySQL replace() til at erstatte strenge i flere poster?

  4. SQL Server Failover Cluster Installation -1