Oracle
 sql >> Baza danych >  >> RDS >> Oracle

użyj LIKE i IN z podzapytaniem w sql

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. przekazanie nazwy tabeli jako parametru plsql

  2. Czy można uniemożliwić Django obcinanie długich nazw tabel?

  3. ORACLE Rzucanie DATY na ZNACZNIK CZASOWY ZE STREFĄ CZASOWĄ Z PRZESUNIĘCIEM

  4. Metoda java.sql.Clob.free() JDBC 4 i kompatybilność wsteczna

  5. Dlaczego nie mogę tworzyć wyzwalaczy na obiektach należących do SYS?