Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak połączyć dwie tabele na podstawie wartości podciągu pól?

Tyle sposobów, aby to zrobić. Dobrym pomysłem byłoby przyjrzenie się planowi wyjaśniania pod kątem różnych sposobów, zanim zdecydujesz się na konkretną metodę. Na przykład, jeśli istnieje indeks oparty na funkcjach dla EMPLOYEE na przykład SUBSTR(id, 2, LENGTH(id) - 1) wtedy będziesz chciał użyć tego w zapytaniu:

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

Kolejne pytanie dotyczy tego, czy wartości w id kolumny są zawsze tej samej długości w EMPLOYEE i INSTRUCTOR . A jeśli mają różne długości? Może jeden ma więcej wyściółki niż drugi. Czy zawsze będą to cyfry? oprócz wiodącego u ? Jeśli tak, warto wypróbować bezpieczny TO_NUMBER() konwersja:

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

Jednak jeszcze jedna rzecz, którą możesz chcieć rozważyć — czy istnieje powód dla wiodącego u w EMPLOYEE id kolumna? Czy mogą być inne główne postacie? Czy wiodący u oznaczać coś (naruszenie pierwszej formy normalnej, ale tak się dzieje)?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź wiersze pod kątem monotonicznie rosnących wartości

  2. Oracle Blob jako img src na stronie PHP

  3. Awaria kreatora Entity Data Model z połączeniem Oracle

  4. nieoczekiwany sukces zapytania

  5. Rama encji 6 i wyrocznia