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
và 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)?