Możesz zawinąć zarówno ciąg, do którego pasujesz, jak i ciąg zawierający userid
chcesz dopasować w ,
separatora, aby upewnić się, że pasujesz do pełnego userid
(zamiast naiwnie używać LIKE
bez uwzględniania otaczających ograniczników i dopasowywania tylko częściowego userid
). Tak:
SELECT *
FROM "USER" u
WHERE EXISTS (
SELECT 1
FROM special_user su
WHERE ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)
Co dla przykładowych danych:
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;
Uwaga:zmieniłem Sally
dodać peera TimTom1
które nie powinny być dopasowywane, mimo że Tom1
podciąg jest dołączony.
Które wyjścia:
db<>fiddle tutaj