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

Làm thế nào để tìm các bản ghi gần như tương tự trong sql?

Tiêu chí tìm kiếm như vậy sẽ không thể sử dụng bất kỳ chỉ mục nào, nhưng nó có thể được thực hiện ...

SELECT
  *
FROM
  yourTable
WHERE
  N-M <= CASE WHEN yourTable.field1 = searchValue1 THEN 1 ELSE 0 END
       + CASE WHEN yourTable.field2 = searchValue2 THEN 1 ELSE 0 END
       + CASE WHEN yourTable.field3 = searchValue3 THEN 1 ELSE 0 END
       ...
       + CASE WHEN yourTable.fieldN = searchValueN THEN 1 ELSE 0 END

Tương tự, nếu tiêu chí tìm kiếm của bạn nằm trong một bảng khác ...

SELECT
  *
FROM
  yourTable
INNER JOIN
  search
    ON N-M <= CASE WHEN yourTable.field1 = search.field1 THEN 1 ELSE 0 END
            + CASE WHEN yourTable.field2 = search.field2 THEN 1 ELSE 0 END
            + CASE WHEN yourTable.field3 = search.field3 THEN 1 ELSE 0 END
            ...
            + CASE WHEN yourTable.fieldN = search.fieldN THEN 1 ELSE 0 END

(Bạn cần điền giá trị của N-M bản thân bạn)

CHỈNH SỬA:

Một cách tiếp cận dài hơi hơn, có thể tạo ra một số sử dụng các chỉ mục ...

SELECT
    id,  -- your table would need to have a primary key / identity column
    MAX(field1)   AS field1,
    MAX(field2)   AS field2,
    MAX(field3)   AS field3,
    ...
    MAX(fieldN)   AS fieldN
FROM
(
    SELECT * FROM yourTable WHERE field1 = searchValue1
    UNION ALL
    SELECT * FROM yourTable WHERE field2 = searchValue2
    UNION ALL
    SELECT * FROM yourTable WHERE field3 = searchValue3
    ...
    SELECT * FROM yourTable WHERE fieldN = searchValueN
)
    AS unioned_seeks
GROUP BY
    id
HAVING
    COUNT(*) >= N-M

Nơi bạn có chỉ mục trên từng trường riêng lẻ và nơi bạn mong đợi số lượng kết quả phù hợp tương đối thấp cho từng trường này có thể hoạt động tốt hơn tùy chọn đầu tiên, với chi phí là mã lặp lại rất nhiều.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres Left Tham gia với điều kiện ở đâu

  2. Cách chọn bản ghi từ 24 giờ qua bằng PostgreSQL

  3. Django JSONField lọc

  4. Lưu cơ sở dữ liệu trên ổ cứng ngoài

  5. Rails 4 session. Thỉnh thoảng là con số không