Bagaimana Anda bergabung di tabel yang sama, dua kali, di mysql?


110

Saya memiliki 2 tabel. Satu (domain) memiliki id domain, dan nama domain (dom_id, dom_url).

yang lain berisi data aktual, 2 di antaranya membutuhkan nama domain TO dan FROM. Jadi saya memiliki 2 kolom rev_dom_from dan rev_dom_for, keduanya menyimpan id nama domain, dari tabel domain.

Sederhana.

Sekarang saya perlu menampilkan kedua nama domain di halaman web. Saya tahu cara menampilkan satu atau yang lain, melalui domain KIRI GABUNG PADA permintaan reviews.rev_dom_for = domains.dom_url, dan kemudian Anda menggemakan dom_url, yang akan menggemakan nama domain di kolom rev_dom_for.

Tetapi bagaimana cara membuatnya menggemakan nama domain kedua, di kolom dom_rev_from?

mysql 

Jawaban:


166

Anda akan menggunakan gabungan lain, sesuatu seperti ini:

SELECT toD.dom_url AS ToURL, 
    fromD.dom_url AS FromUrl, 
    rvw.*

FROM reviews AS rvw

LEFT JOIN domain AS toD 
    ON toD.Dom_ID = rvw.rev_dom_for

LEFT JOIN domain AS fromD 
    ON fromD.Dom_ID = rvw.rev_dom_from

EDIT :

Yang Anda lakukan hanyalah bergabung di tabel beberapa kali. Lihatlah query di posting: itu memilih nilai dari tabel Review (alias rvw), tabel itu memberi Anda 2 referensi ke tabel Domain (FOR dan FROM).

Pada titik ini, sangat mudah untuk bergabung dengan tabel Domain ke tabel Review. Sekali (alias sebagai toD) untuk FOR, dan kedua kalinya (alias sebagai fromD) untuk FROM.

Kemudian dalam daftar PILIH, Anda akan memilih bidang DOM_URL dari kedua LEFT JOINS dari tabel DOMAIN, mereferensikannya dengan alias tabel untuk setiap gabungan dalam referensi ke tabel Domain, dan menamainya sebagai ToURL dan FromUrl.

Untuk info lebih lanjut tentang aliasing di SQL, baca di sini .


5
Triknya adalah Anda telah mengidentifikasi setiap JOIN dengan nama 'AS to' dan 'AS from' sehingga Anda dapat menggunakannya di SELECT.
Matthew Smith

1
menggunakan kata kunci non untuk nama tabel akan memperjelas. Selain itu, gunakan kata kunci "as" saat melakukan aliasing.
TheSoftwareJedi

Maafkan saya, tapi saya masih tidak mengerti bagaimana ini seharusnya bekerja. 2 tabel tersebut adalah: domain (dom_id, dom_url), dan ulasan (rev_id, rev_dom_from, rev_dom_for). Jika seseorang dapat menulis kueri yang tepat sehingga saya tidak dapat menguasainya, itu akan bagus, karena saya tidak tahu apa yang harus saya edit.

1
Pikirkan alias sebagai baris referensi dalam tabel, bukan tabel itu sendiri. Dengan analogi, dalam loop seperti "for (i = 0; i <max; i ++)" variabel i adalah nilai iterasi, bukan loop itu sendiri.
Bill Karwin

Saya tidak tahu Anda bisa melakukan ini di SQL, Gracias.
Adam F

8

Diberikan tabel berikut ..

Domain Table
dom_id | dom_url

Review Table
rev_id | rev_dom_from | rev_dom_for

Coba sql ini ... (Hampir sama dengan yang ditulis oleh Stephen Wrighton di atas) Triknya adalah pada dasarnya Anda memilih dari tabel domain dua kali dalam kueri yang sama dan menggabungkan hasilnya.

Select d1.dom_url, d2.dom_id from
review r, domain d1, domain d2
where d1.dom_id = r.rev_dom_from
and d2.dom_id = r.rev_dom_for

Jika Anda masih terjebak, harap lebih spesifik dengan tepatnya Anda tidak mengerti.


-1

Baca ini dan coba, ini akan membantu Anda:

Tabel 1

column11,column12,column13,column14

Meja 2

column21,column22,column23,column24


SELECT table1.column11,table1.column12,table2asnew1.column21,table2asnew2.column21 
FROM table1 INNER JOIN table2 AS table2asnew1 ON table1.column11=table2asnew1.column21  INNER TABLE table2 as table2asnew2 ON table1.column12=table2asnew2.column22

table2asnew1 adalah turunan dari tabel 2 yang cocok dengan table1.column11=table2asnew1.column21

dan

table2asnew2 adalah contoh lain dari tabel 2 yang cocok dengan table1.column12=table2asnew2.column22

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.