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

Nối hai bảng trong một truy vấn phức tạp (không phải dữ liệu thống nhất)

SELECT DISTINCT ON (1)
       t.id, d.address, d.id
FROM   data_table t
JOIN   dictionary d ON replace(d.address, ' ', '')
                 LIKE (replace(t.address, ' ', '') || '%')
ORDER  BY t.id, d.address, d.id

(ORDER BY cập nhật sau khi cập nhật câu hỏi.) Không có ORDER BY nó đang chọn một kết hợp tùy ý.
Giải thích cho kỹ thuật trong câu trả lời có liên quan này:
Chọn hàng đầu tiên trong mỗi nhóm GROUP BY?

Chỉ mục chức năng trên từ điển của bạn sẽ giúp việc này trở nên nhanh chóng :

CREATE INDEX dictionary_address_text_pattern_ops_idx
ON dictionary (replace(address, ' ', '') text_pattern_ops);

Giải thích thêm cho điều đó trong câu trả lời mà tôi đã cung cấp cho câu hỏi trước .

Người ta có thể tranh luận nếu điều đó giúp bạn có được kết quả phù hợp nhất. Một thay thế sẽ là một kết hợp tương tự với một chỉ số bát quái. Chi tiết trong liên kết đầu tiên mà tôi đã thêm vào câu hỏi cuối cùng của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi PostgreSQL 9.0:cột t.tgisconstraint không tồn tại

  2. Django không thể tải đồ đạc thử nghiệm, IntegrityError

  3. Có vấn đề về hiệu suất khi lưu trữ tệp trong PostgreSQL không?

  4. Postgresql chênh lệch giữa hai cột ngày?

  5. Làm thế nào để tìm bảng kế thừa theo chương trình trong PostgreSQL?