sql >> Base de Datos >  >> RDS >> Oracle

use LIKE e IN con subconsulta en sql

Puede envolver tanto la cadena con la que está haciendo coincidir como la cadena que contiene el userid desea hacer coincidir en el , delimitador para asegurarse de que coincide con un userid completo (en lugar de usar ingenuamente LIKE sin considerar los delimitadores circundantes y solo haciendo coincidir un userid parcial ). Así:

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

Que, para los datos de muestra:

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;

Nota:cambié Sally para agregar un compañero TimTom1 que no debería coincidir aunque el Tom1 la subcadena está incluida.

Qué salidas:

db<>fiddle aquí