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

Cách nối hai bảng với một trong hai bảng không có khóa chính và độ dài ký tự không giống nhau

Hãy thử điều này để so sánh chỉ 8 ký tự đầu tiên:

SELECT r.domainid, r.dombegin, r.domend, d.ddid 
FROM   domainregion r
JOIN   dyndomrun d ON r.domainid::varchar(8) = d.ddid 
ORDER  BY r.domainid, d.ddid, r.dombegin, r.domend;

Dàn diễn viên cắt xén các ký tự theo sau một cách ngầm định. ddid chỉ có 8 ký tự để bắt đầu. Không cần phải xử lý nó, quá. Điều này đạt được tương tự:

JOIN   dyndomrun d ON left(r.domainid, 8) = d.ddid 

Tuy nhiên, hãy lưu ý rằng hàm chuỗi left() chỉ được giới thiệu với PostgreSQL 9.1. Trong các phiên bản cũ hơn, bạn có thể thay thế:

JOIN   dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid

__

Giải thích cơ bản cho người mới bắt đầu:

  • Truy vấn sử dụng JOIN . Đọc thêm về điều đó trong sách hướng dẫn .

  • FROM domainregion r là viết tắt của FROM domainregion AS r . AS chỉ là tiếng ồn trong trường hợp này trong PostgreSQL. Bí danh bảng làm cho truy vấn ngắn hơn và dễ đọc hơn nhưng không có tác động nào khác ở đây. Ví dụ, bạn cũng có thể sử dụng bí danh bảng để bao gồm cùng một bảng nhiều lần.

  • Điều kiện tham gia ON r.domainid::varchar(8) = d.ddid chỉ nối các hàng đó với nhau khi hai biểu thức khớp chính xác. Một lần nữa, hãy đọc về những điều cơ bản trong sách hướng dẫn này (hoặc bất kỳ nguồn nào khác).

Đây là một truy vấn đơn giản, không cần giải thích nhiều ở đây.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách liệt kê tất cả cơ sở dữ liệu với ActiveRecord

  2. Tạo kết xuất Postgres và lưu vào một máy chủ khác

  3. Làm thế nào để chèn một hàng trong postgreSQL pgAdmin?

  4. Cách liệt kê tất cả các chế độ xem trong cơ sở dữ liệu PostgreSQL

  5. Trình tự ngủ đông không được tạo