sql >> Database teknologi >  >> RDS >> Oracle

Hvordan forbinder man to tabeller baseret på delstrengværdier af felter?

Så mange måder at gøre dette på. Det ville være en god idé at se på forklaringsplanen for forskellige måder, før du forpligter dig til en bestemt metode. For eksempel, hvis der er et funktionsbaseret indeks på EMPLOYEE såsom SUBSTR(id, 2, LENGTH(id) - 1) så vil du gerne bruge det i din forespørgsel:

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

Et andet spørgsmål er, om værdierne i id kolonne har altid samme længde i EMPLOYEE og INSTRUCTOR . Hvad hvis de er af forskellig længde? Måske har den ene mere polstring end den anden. De vil også altid være cifre bortset fra en førende u ? Hvis det er tilfældet, kan det være umagen værd at prøve en sikker 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 anden ting du måske vil overveje -- er der en grund til den førende u i EMPLOYEE id kolonne? Kan der være andre hovedpersoner? Gør den førende u stå for noget (overtræder første normalform, men det sker)?



  1. Docker (Apple Silicon/M1 Preview) MySQL intet matchende manifest for linux/arm64/v8 i manifestlisteposterne

  2. Hvordan kan du se, hvilket transaktionsisoleringsniveau en vilkårlig oracle-session bruger

  3. Forbind MySQL med Python 3.6

  4. Tildel pladser i vurderingen (MySQL, PHP)