Ini agak rumit, tapi saya punya 2 tabel. Katakanlah strukturnya seperti ini:
*Table1*
ID
PhoneNumber1
PhoneNumber2
*Table2*
PhoneNumber
SomeOtherField
Tabel dapat digabungkan berdasarkan Table1.PhoneNumber1 -> Table2.PhoneNumber, atau Table1.PhoneNumber2 -> Table2.PhoneNumber.
Sekarang, saya ingin mendapatkan hasil yang berisi PhoneNumber1, SomeOtherField yang sesuai dengan PhoneNumber1, PhoneNumber2, dan SomeOtherField yang sesuai dengan PhoneNumber2.
Saya memikirkan 2 cara untuk melakukan ini - baik dengan bergabung di tabel dua kali, atau dengan bergabung sekali dengan OR di klausa ON.
Metode 1 :
SELECT t1.PhoneNumber1, t1.PhoneNumber2,
t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.PhoneNumber = t1.PhoneNumber1
INNER JOIN Table2 t3
ON t3.PhoneNumber = t1.PhoneNumber2
Sepertinya ini berhasil.
Metode 2 :
Entah bagaimana memiliki kueri yang terlihat seperti ini -
SELECT ...
FROM Table1
INNER JOIN Table2
ON Table1.PhoneNumber1 = Table2.PhoneNumber OR
Table1.PhoneNumber2 = Table2.PhoneNumber
Saya belum berhasil dan saya tidak yakin apakah ada cara untuk melakukannya.
Apa cara terbaik untuk melakukannya? Tidak ada cara yang tampak sederhana atau intuitif ... Adakah cara yang lebih mudah untuk melakukan ini? Bagaimana persyaratan ini diterapkan secara umum?
Yang pertama bagus kecuali jika Phone1 atau (lebih mungkin) phone2 bisa nihil. Dalam hal ini Anda ingin menggunakan gabungan Kiri dan bukan gabungan dalam.
Biasanya pertanda buruk ketika Anda memiliki meja dengan dua bidang nomor telepon. Biasanya ini berarti desain database Anda cacat.
sumber
Anda bisa menggunakan
UNION
untuk menggabungkan dua gabungan:sumber
Masalah saya adalah menampilkan catatan meskipun tidak ada atau hanya ada satu nomor telepon (buku alamat lengkap). Oleh karena itu saya menggunakan LEFT JOIN yang mengambil semua record dari kiri, meskipun tidak ada yang sesuai di sebelah kanan. Bagi saya ini berfungsi di Microsoft Access SQL (mereka memerlukan tanda kurung!)
sumber
Metode pertama adalah pendekatan yang tepat dan akan melakukan apa yang Anda butuhkan. Namun, dengan gabungan dalam, Anda hanya akan memilih baris dari
Table1
jika kedua nomor telepon adaTable2
. Anda mungkin ingin melakukanLEFT JOIN
agar semua baris dariTable1
dipilih. Jika nomor telepon tidak cocok, makaSomeOtherField
s akan menjadi nol. Jika Anda ingin memastikan Anda memiliki setidaknya satu nomor telepon yang cocok, Anda dapat melakukannyaWHERE t2.PhoneNumber IS NOT NULL OR t3.PhoneNumber IS NOT NULL
Metode kedua mungkin bermasalah: apa yang terjadi jika
Table2
memiliki keduanyaPhoneNumber1
danPhoneNumber2
? Baris mana yang akan dipilih? Tergantung pada data Anda, kunci asing, dll. Ini mungkin menjadi masalah atau tidak.sumber