sql >> Databáze >  >> RDS >> Oracle

Jak spojit dvě tabulky na základě hodnot podřetězců polí?

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á)?



  1. Nelze se připojit ke dvěma postgres databázím v rails 3.2.

  2. Jak získat data ze spojené tabulky

  3. Jaké je výchozí pořadí výběru v PostgreSQL nebo MySQL?

  4. java.sql.SQLRecoverableException - opětovné připojení z jdbc