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

Làm cách nào để nối hai bảng dựa trên giá trị chuỗi con của các trường?

Rất nhiều cách để làm điều này. Sẽ là một ý kiến ​​hay nếu bạn xem xét kế hoạch giải thích để biết nhiều cách khác nhau trước khi cam kết với một phương pháp cụ thể. Ví dụ:nếu có một chỉ mục dựa trên hàm trên EMPLOYEE chẳng hạn như SUBSTR(id, 2, LENGTH(id) - 1) thì bạn sẽ muốn sử dụng nó trong truy vấn của mình:

SELECT e.name, i.name
  FROM employee e INNER JOIN instructor i
    ON SUBSTR(e.id, 2, LENGTH(e.id) - 1) = SUBSTR(i.id, 2, LENGTH(i.id) - 1);

Một câu hỏi khác là nếu các giá trị trong id cột luôn có cùng độ dài trong EMPLOYEE INSTRUCTOR . Điều gì sẽ xảy ra nếu chúng có độ dài khác nhau? Có thể một cái có nhiều đệm hơn cái khác. Ngoài ra, chúng sẽ luôn là chữ số ngoài u hàng đầu ? Nếu vậy, bạn nên thử một TO_NUMBER() an toàn chuyển đổi:

SELECT e.name, i.name
  FROM employee e INNER JOIN instructor i
    ON TO_NUMBER(REGEXP_SUBSTR(e.id, '\d+$')) = TO_NUMBER(REGEXP_SUBSTR(i.id, '\d+$'));

Tuy nhiên, một điều khác mà bạn có thể muốn xem xét - có lý do cho u đứng đầu trong EMPLOYEE id cột? Có thể có các nhân vật chính khác? u đứng đầu có đại diện cho điều gì đó (vi phạm hình thức bình thường đầu tiên, nhưng điều đó xảy ra)?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle có khái niệm chỉ mục được lọc không?

  2. Mở con trỏ cho tên bảng động trong thủ tục PL / SQL

  3. Thêm dữ liệu đã kết hợp vào kết quả truy vấn

  4. Cách thực thi PL SQL Block trong Oracle

  5. Lệnh Oracle CREATE TABLE trong PL / SQL với 10 ví dụ