Så många sätt att göra detta. Det skulle vara en bra idé att titta på förklaraplanen för olika sätt innan du bestämmer dig för en viss metod. Till exempel, om det finns ett funktionsbaserat index på EMPLOYEE
såsom SUBSTR(id, 2, LENGTH(id) - 1)
då vill du använda det i din fråga:
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);
En annan fråga är om värdena i id
kolumnen är alltid lika långa i EMPLOYEE
och INSTRUCTOR
. Vad händer om de är av olika längd? Kanske har en mer stoppning än en annan. Kommer de alltid att vara siffror förutom en ledande u
? Om så är fallet kan det vara värt att prova en säker TO_NUMBER()
konvertering:
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+$'));
En annan sak som du kanske vill överväga är att det finns en anledning till den ledande u
i EMPLOYEE
id
kolumn? Kan det finnas andra huvudkaraktärer? Gör den inledande u
stå för något (bryter mot första normalformen, men det händer)?