Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да съединя две таблици въз основа на стойности на подниз на полета?

Толкова много начини да направите това. Би било добра идея да разгледате плана за обяснение за различни начини, преди да се ангажирате с определен метод. Например, ако има базиран на функция индекс на EMPLOYEE като SUBSTR(id, 2, LENGTH(id) - 1) тогава ще искате да използвате това в заявката си:

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);

Друг въпрос е дали стойностите в id винаги са с еднаква дължина в EMPLOYEE и INSTRUCTOR . Ами ако са с различна дължина? Може би един има повече подплата от друг. Освен това винаги ли ще бъдат цифри с изключение на водещ u ? Ако е така, тогава може би си струва да опитате безопасен TO_NUMBER() преобразуване:

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+$'));

Едно друго нещо обаче, което може да искате да обмислите -- има ли причина за водещото u в EMPLOYEE id колона? Може ли да има други главни герои? Прави водещия u подкрепяте нещо (нарушаване на първата нормална форма, но това се случва)?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL мониторинг в SQL Developer

  2. SSDT в Visual Studio 2015 Oracle Connection Issue

  3. if (изберете брой (колона) от таблица)> 0 тогава

  4. Получаване на допълнителни редове - След присъединяване към 3-те маси с помощта на Left Join

  5. Използване на SELECT UNION и връщане на изход от две колони от една таблица