Tolik způsobů, jak to udělat. Než se pustíte do konkrétní metody, bylo by dobré podívat se na plán vysvětlení různými způsoby. Například pokud existuje index založený na funkcích u EMPLOYEE
například SUBSTR(id, 2, LENGTH(id) - 1)
pak to budete chtít použít ve svém dotazu:
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);
Další otázkou je, zda hodnoty v id
sloupce jsou vždy stejně dlouhé v EMPLOYEE
a INSTRUCTOR
. Co když jsou různě dlouhé? Možná má jeden více vycpávek než druhý. Budou také vždy číslice kromě úvodního u
? Pokud ano, pak by možná stálo za to vyzkoušet bezpečné TO_NUMBER()
konverze:
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+$'));
Ještě jedna věc, kterou byste však měli zvážit – existuje důvod pro úvodní u
v EMPLOYEE
id
sloupec? Mohou tam být další hlavní postavy? Má úvodní u
stát za něčím (porušuje první normální formu, ale to se stává)?