Bagaimana saya bisa bergabung dengan beberapa tabel SQL menggunakan ID?

141

Saya memiliki 4 tabel berbeda yang ingin saya ikuti. Tabel disusun dengan kolom sebagai berikut:

TableA - aID | nameA | dID

TableB - bID | nameB | cID | aID

TableC - cID | nameC | date

TableD - dID | nameD

Dimulai dengan Tabel A, saya mengerti bagaimana GABUNG tabel a dan c menggunakan b, karena b memiliki Kunci Utama untuk tabel tersebut. Saya ingin dapat bergabung dengan table TableD di TableA juga. Di bawah ini adalah pernyataan SQL saya yang pertama kali bergabung dengan tabel A dan B, kemudian menggabungkannya ke C:

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
WHERE (DATE(TableC.date)=date(now())) 

Ketika saya mencoba untuk menambahkan gabungan lain, untuk memasukkan D, saya mendapatkan kesalahan bahwa 'TableD' tidak dikenal:

 SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA
    ON TableB.aID= TableA.aID)
    INNER JOIN TableC ON(TableB.cID= Tablec.cID)
    INNER JOIN TableA ta ON(ta.dID= TableD.dID)
    WHERE (DATE(TableC.date)=date(now())) 
Matahari
sumber

Jawaban:

302

Anda menginginkan sesuatu yang lebih seperti ini:

SELECT TableA.*, TableB.*, TableC.*, TableD.*
FROM TableA
    JOIN TableB
        ON TableB.aID = TableA.aID
    JOIN TableC
        ON TableC.cID = TableB.cID
    JOIN TableD
        ON TableD.dID = TableA.dID
WHERE DATE(TableC.date)=date(now()) 

Dalam contoh Anda, Anda sebenarnya tidak termasuk TableD. Yang harus Anda lakukan adalah melakukan bergabung lagi seperti yang Anda lakukan sebelumnya.

Catatan: Anda akan melihat bahwa saya menghapus banyak tanda kurung Anda, karena mereka sebenarnya tidak diperlukan dalam sebagian besar kasus yang Anda miliki, dan hanya menambah kebingungan ketika mencoba membaca kode. Bersarang dengan benar adalah cara terbaik untuk membuat kode Anda dapat dibaca dan dipisahkan.

Justin Pihony
sumber
2
tidak akan memilih tableN. * menduplikasi semua ID kunci utama yang cocok di label kolom? (pertanyaan tidak menentukan output apa yang diinginkan tetapi biasanya Anda tidak ingin melakukan ini saya pikir)
Heather Stark
6
Mungkin saya bertanya mengapa JOINTableCini ON TableC.cID = TableB.cIDdan tidak TableC.cID = TableA.cID. Saya berasumsi kita akan bergabung TableAdengan 3 tabel lainnya.
emihir0
25
SELECT 
    a.nameA, /* TableA.nameA */
    d.nameD /* TableD.nameD */
FROM TableA a 
    INNER JOIN TableB b on b.aID = a.aID 
    INNER JOIN TableC c on c.cID = b.cID 
    INNER JOIN TableD d on d.dID = a.dID 
WHERE DATE(c.`date`) = CURDATE()
Nemoden
sumber
4

Anda belum bergabung dengan TableD, hanya memilih TableD FIELD ( dID) dari salah satu tabel.

Chriseyre2000
sumber
2

Simple INNER JOIN VIEW code ....

CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;
Manu RS
sumber
Tidak menggunakan struktur tabel OP ?!
Istiaque Ahmed