Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

sử dụng LIKE và IN với truy vấn con trong sql

Bạn có thể quấn cả chuỗi mà bạn đang đối sánh và chuỗi chứa userid bạn muốn đối sánh trong , dấu phân tách để bạn đảm bảo rằng bạn khớp với một userid hoàn chỉnh (thay vì sử dụng LIKE một cách ngây thơ mà không xem xét các dấu phân cách xung quanh và chỉ khớp với một phần userid ). Như thế này:

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

Mà, đối với dữ liệu mẫu:

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;

Lưu ý:Tôi đã thay đổi Sally để thêm một người ngang hàng TimTom1 điều đó sẽ không được khớp ngay cả khi Tom1 chuỗi con được bao gồm.

Kết quả đầu ra:

db <> fiddle tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao lưu trực tuyến Vs ngoại tuyến

  2. SQL:Có thể 'nhóm theo' theo kết quả của hàm 'thích' không?

  3. tính toán số dư đang chạy trong truy vấn oracle

  4. Oracle.Dataaccess nằm trong GAC. Tôi có thể kiểm soát phiên bản tôi sử dụng không?

  5. Thống kê bảng GTT và SYS.WRI $ _OPTSTAT_TAB_HISTORY