Bạn có thể đạt được điều này bằng cách tự tham gia, chẳng hạn như:
SELECT DISTINCT e2.eventId
FROM event_tags e1
INNER JOIN event_tags e2
ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
WHERE e1.eventId = {}
Tôi nhận thấy rằng truy vấn thứ hai có LIMIT 3 mệnh đề. Trước hết, xin lưu ý rằng không có ORDER BY mệnh đề này không tạo ra kết quả có thể đoán trước được. Đây là giải pháp dựa trên hàm window ROW_NUMBER() (có sẵn trong MySQL 8), sẽ tạo ra không nhiều hơn 3 event_id cho mỗi thẻ phù hợp:
SELECT DISTINCT event_id FROM (
SELECT e2.eventId, ROW_NUMBER() OVER(PARTITION BY e1.eventId ORDER BY e2.eventId) rn
FROM event_tags e1
INNER JOIN event_tags e2
ON e2.tagName LIKE CONCAT('%', e1.tagName, '%') AND e2.eventId != e1.eventId
WHERE e1.eventId = {}
) WHERE rn <= 3