Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden Sie LIKE und IN mit Unterabfragen in SQL

Sie können sowohl die Zeichenfolge, mit der Sie übereinstimmen, als auch die Zeichenfolge umschließen, die die userid enthält Sie im , übereinstimmen möchten Trennzeichen, damit Sie sicherstellen, dass Sie mit einer vollständigen userid übereinstimmen (anstatt naiv LIKE zu verwenden ohne Berücksichtigung der umgebenden Trennzeichen und nur mit einer teilweisen userid übereinstimmen ). So:

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

Was für die Beispieldaten:

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;

Hinweis:Ich habe Sally geändert um einen Peer TimTom1 hinzuzufügen das sollte nicht übereinstimmen, obwohl der Tom1 Teilstring ist enthalten.

Welche Ausgaben:

db<>fiddle hier