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