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