sql >> Databasteknik >  >> RDS >> Oracle

Hur sammanfogar man två tabeller baserat på delsträngvärden för fält?

Så många sätt att göra detta. Det skulle vara en bra idé att titta på förklaraplanen för olika sätt innan du bestämmer dig för en viss metod. Till exempel, om det finns ett funktionsbaserat index på EMPLOYEE såsom SUBSTR(id, 2, LENGTH(id) - 1) då vill du använda det i din fråga:

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

En annan fråga är om värdena i id kolumnen är alltid lika långa i EMPLOYEE och INSTRUCTOR . Vad händer om de är av olika längd? Kanske har en mer stoppning än en annan. Kommer de alltid att vara siffror förutom en ledande u ? Om så är fallet kan det vara värt att prova en säker 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 annan sak som du kanske vill överväga är att det finns en anledning till den ledande u i EMPLOYEE id kolumn? Kan det finnas andra huvudkaraktärer? Gör den inledande u stå för något (bryter mot första normalformen, men det händer)?



  1. RANGE PRECEDING stöds endast med UNBOUNDED

  2. Kan jag uppdatera/välja från en tabell i en fråga?

  3. Hur man undkommer frågetecken (?) med Spring JpaRepository

  4. Formatera SQLite-frågeresultat som kolumner med kolumnrubriker