Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menggabungkan dua tabel berdasarkan nilai substring bidang?

Begitu banyak cara untuk melakukan ini. Ini akan menjadi ide yang baik untuk melihat rencana penjelasan untuk berbagai cara sebelum melakukan metode tertentu. Misalnya, jika ada indeks berbasis fungsi pada EMPLOYEE seperti SUBSTR(id, 2, LENGTH(id) - 1) maka Anda ingin menggunakannya dalam kueri Anda:

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

Pertanyaan lain adalah apakah nilai dalam id kolom selalu sama panjang di EMPLOYEE dan INSTRUCTOR . Bagaimana jika panjangnya berbeda? Mungkin yang satu memiliki lebih banyak padding daripada yang lain. Juga, apakah mereka akan selalu menjadi digit selain u leading terkemuka ? Jika demikian, mungkin ada baiknya mencoba TO_NUMBER() yang aman konversi:

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

Namun, satu hal lain yang mungkin ingin Anda pertimbangkan -- apakah ada alasan untuk u . utama di EMPLOYEE id kolom? Bisakah ada karakter utama lainnya? Apakah u . yang terkemuka berdiri untuk sesuatu (melanggar bentuk normal pertama, tapi itu terjadi)?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Urutan eksekusi kondisi dalam klausa 'di mana' SQL

  2. PL/SQL menulis ulang kueri gabungan dengan klausa 'IN'

  3. Masalah Parameter ODP .NET dengan tipe data uint

  4. Apa yang menyebabkan kesalahan tanda kurung kanan yang hilang dalam SQL?

  5. Performa buruk mendapatkan bidang gumpalan dari Oracle di .Net