Oracle
 sql >> база данни >  >> RDS >> Oracle

използвайте LIKE и IN с подзаявка в sql

Можете да обвиете както низа, с който съвпадате, така и низа, съдържащ userid искате да съвпаднете в , разделител, така че да сте сигурни, че отговаряте на пълен userid (вместо наивно използване на LIKE без да се вземат предвид околните разделители и да се съвпада само с частичен userid ). Като това:

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

Което за примерните данни:

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;

Забележка:Промених Sally за добавяне на партньор TimTom1 които не трябва да съвпадат, въпреки че Tom1 е включен подниз.

Кое извежда:

db<>fiddle тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изявление за изпълнение на sqlplus print

  2. Съветникът за модел на данни на обект получава изключение, когато се опитва да добави нова Oracle връзка

  3. Продължавайте да получавате ORA-00933:SQL командата не е приключила правилно

  4. ORA-06531 след надграждане на Oracle

  5. Инсталирайте Oracle Instant клиента в Docker контейнера за Python cx_Oracle