sql >> Database >  >> RDS >> Oracle

Hoe voeg ik twee tabellen samen op basis van substringwaarden van velden?

Zoveel manieren om dit te doen. Het zou een goed idee zijn om het uitlegplan voor verschillende manieren te bekijken voordat u zich tot een bepaalde methode verbindt. Als er bijvoorbeeld een functie-gebaseerde index is op EMPLOYEE zoals SUBSTR(id, 2, LENGTH(id) - 1) dan wil je dat in je zoekopdracht gebruiken:

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

Een andere vraag is of de waarden in de id kolommen zijn altijd even lang in EMPLOYEE en INSTRUCTOR . Wat als ze van verschillende lengte zijn? Misschien heeft de een meer vulling dan de ander. Zijn het ook altijd cijfers afgezien van een leidende u ? Zo ja, dan is het misschien de moeite waard om een ​​veilige TO_NUMBER() . te proberen conversie:

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

Een ander ding dat u misschien wilt overwegen -- is er een reden voor de leidende u in de EMPLOYEE id kolom? Kunnen er andere hoofdpersonen zijn? Heeft de leidende u ergens voor staan ​​(in strijd met de eerste normaalvorm, maar dat gebeurt)?



  1. SELECT INTO en niet-aangegeven variabele fout

  2. asp.net webservice hoog CPU-gebruik

  3. mysql:Hoe kan ik het teken aan het begin of einde van een veld verwijderen?

  4. ImportError:Geen module met de naam mysql.connector met Python2