Ada beberapa cara untuk melakukan ini, tergantung pada apa yang Anda sebenarnya ingin. Tanpa kolom umum, Anda perlu memutuskan apakah Anda ingin memperkenalkan kolom umum atau mendapatkan produk.
Katakanlah Anda memiliki dua tabel:
parts: custs:
+----+----------+ +-----+------+
| id | desc | | id | name |
+----+----------+ +-----+------+
| 1 | Sprocket | | 100 | Bob |
| 2 | Flange | | 101 | Paul |
+----+----------+ +-----+------+
Lupakan kolom yang sebenarnya karena kemungkinan besar Anda akan memiliki hubungan pelanggan/pesanan/bagian dalam hal ini; Saya baru saja menggunakan kolom tersebut untuk mengilustrasikan cara melakukannya.
Produk kartesius akan mencocokkan setiap baris di tabel pertama dengan setiap baris di tabel kedua:
> select * from parts, custs;
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
1 Sprocket 102 Paul
2 Flange 101 Bob
2 Flange 102 Paul
Itu mungkin bukan yang Anda inginkan karena 1000 bagian dan 100 pelanggan akan menghasilkan 100.000 baris dengan banyak informasi duplikat.
Atau, Anda dapat menggunakan gabungan untuk hanya menampilkan data, meskipun tidak berdampingan (Anda harus memastikan jenis kolom kompatibel antara dua pilihan, baik dengan membuat kolom tabel kompatibel atau memaksanya dalam pilihan ):
> select id as pid, desc, null as cid, null as name from parts
union
select null as pid, null as desc, id as cid, name from custs;
pid desc cid name
--- ---- --- ----
101 Bob
102 Paul
1 Sprocket
2 Flange
Di beberapa database, Anda dapat menggunakan kolom rowid/rownum atau pseudo-column untuk mencocokkan record secara berdampingan, seperti:
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
2 Flange 101 Bob
Kodenya akan seperti:
select a.id, a.desc, b.id, b.name
from parts a, custs b
where a.rownum = b.rownum;
Masih seperti produk kartesius tetapi where
klausa membatasi bagaimana baris digabungkan untuk membentuk hasil (jadi bukan produk kartesius sama sekali).
Saya belum menguji SQL itu untuk ini karena ini adalah salah satu keterbatasan DBMS pilihan saya, dan memang demikian, saya tidak percaya itu pernah diperlukan dalam skema yang dipikirkan dengan benar. Karena SQL tidak menjamin urutan yang menghasilkan data, pencocokan dapat berubah setiap kali Anda melakukan kueri kecuali jika Anda memiliki spesifik hubungan atau order by
klausa.
Saya pikir hal yang ideal untuk dilakukan adalah menambahkan kolom ke kedua tabel yang menentukan apa hubungannya. Jika tidak ada hubungan nyata, maka Anda mungkin tidak punya urusan untuk mencoba menempatkannya berdampingan dengan SQL.
Jika Anda hanya ingin mereka ditampilkan berdampingan dalam laporan atau halaman web (dua contoh), alat yang tepat untuk melakukannya adalah apa pun yang menghasilkan laporan atau halaman web Anda, ditambah dengan dua independen Kueri SQL untuk mendapatkan dua tabel yang tidak terkait. Misalnya, kisi dua kolom di BIRT (atau Crystal atau Jasper) masing-masing dengan tabel data terpisah, atau tabel dua kolom HTML (atau CSS) masing-masing dengan tabel data terpisah.