SQL Inner-gabung dengan 3 tabel?

330

Saya mencoba untuk bergabung dengan 3 tabel dalam tampilan; inilah situasinya:

Saya memiliki tabel yang berisi informasi siswa yang mendaftar untuk tinggal di Kampus Universitas ini. Saya memiliki tabel lain yang mencantumkan Aula Preferensi (3 dari mereka) untuk setiap Siswa. Tetapi masing-masing preferensi ini hanyalah Nomor ID, dan Nomor ID memiliki Nama Hall yang sesuai di tabel ketiga (tidak mendesain database ini ...).

Cukup banyak, saya miliki INNER JOINdi atas meja dengan preferensi mereka, dan informasi mereka, hasilnya adalah seperti ...

 John Doe | 923423 | Incoming Student | 005

Di mana 005akan menjadi HallID. Jadi Sekarang saya ingin mencocokkannya HallIDdengan tabel ketiga, di mana tabel ini berisi a HallIDdan HallName.

Cukup banyak, saya ingin hasil saya menjadi seperti ...

 John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)

Inilah yang saat ini saya miliki:

SELECT
  s.StudentID, s.FName, 
  s.LName, s.Gender, s.BirthDate, s.Email, 
  r.HallPref1, r.HallPref2, r.HallPref3
FROM
  dbo.StudentSignUp AS s 
  INNER JOIN RoomSignUp.dbo.Incoming_Applications_Current AS r 
    ON s.StudentID = r.StudentID 
  INNER JOIN HallData.dbo.Halls AS h 
    ON r.HallPref1 = h.HallID
Bob Sanders
sumber

Jawaban:

503

Anda dapat melakukan hal berikut (saya menebak bidang tabel, dll)

SELECT s.studentname
    , s.studentid
    , s.studentdesc
    , h.hallname
FROM students s
INNER JOIN hallprefs hp
    on s.studentid = hp.studentid
INNER JOIN halls h
    on hp.hallid = h.hallid

Berdasarkan permintaan Anda untuk beberapa aula, Anda dapat melakukannya dengan cara ini. Anda cukup bergabung di meja Aula Anda beberapa kali untuk setiap kamar pref id:

SELECT     s.StudentID
    , s.FName
    , s.LName
    , s.Gender
    , s.BirthDate
    , s.Email
    , r.HallPref1
    , h1.hallName as Pref1HallName
    , r.HallPref2 
    , h2.hallName as Pref2HallName
    , r.HallPref3
    , h3.hallName as Pref3HallName
FROM  dbo.StudentSignUp AS s 
INNER JOIN RoomSignUp.dbo.Incoming_Applications_Current AS r 
    ON s.StudentID = r.StudentID 
INNER JOIN HallData.dbo.Halls AS h1 
    ON r.HallPref1 = h1.HallID
INNER JOIN HallData.dbo.Halls AS h2
    ON r.HallPref2 = h2.HallID
INNER JOIN HallData.dbo.Halls AS h3
    ON r.HallPref3 = h3.HallID
Taryn
sumber
1
Ini berfungsi hanya dengan satu preferensi, tetapi bagaimana saya ingin mengedit ini agar berfungsi dengan 3 preferensi? (satu kolom untuk setiap preferensi)
Bob Sanders
1
@ BobSanders baru saja memperbarui jawaban saya, maka jika Anda tidak ingin nomor HallPref letakkan saja kolom-kolom itu
Taryn
46
SELECT column_Name1,column_name2,......
  From tbl_name1,tbl_name2,tbl_name3
  where tbl_name1.column_name = tbl_name2.column_name 
  and tbl_name2.column_name = tbl_name3.column_name
Lomorng
sumber
27
Jawaban ini tidak memiliki penjelasan yang masuk akal untuk menunjukkan kepada OP bagaimana mencapai tujuan awal.
gaige
41

Jika Anda memiliki 3 tabel dengan yang sama IDuntuk digabung, saya pikir akan seperti ini:

SELECT * FROM table1 a
JOIN table2 b ON a.ID = b.ID
JOIN table3 c ON a.ID = c.ID

Cukup ganti *dengan apa yang ingin Anda dapatkan dari tabel.

aquatorrent
sumber
6
SELECT table1.col,table2.col,table3.col 
FROM table1 
INNER JOIN 
(table2 INNER JOIN table3 
ON table3.id=table2.id) 
ON table1.id(f-key)=table2.id
AND //add any additional filters HERE
Khurram Basharat
sumber
3

Anda hanya perlu gabungan kedua yang menghubungkan ID Numberyang Anda miliki sekarang ke ID Numbertabel ketiga. Setelah itu, ganti dengan ID Numberoleh Hall Namedan voilá :)

aF.
sumber
2
SELECT * 
FROM 
    PersonAddress a, 
    Person b,
    PersonAdmin c
WHERE a.addressid LIKE '97%' 
    AND b.lastname LIKE 'test%'
    AND b.genderid IS NOT NULL
    AND a.partyid = c.partyid 
    AND b.partyid = c.partyid;
ashu
sumber
2

Ada banyak tanggapan tetapi pelajaran keseluruhan tampaknya adalah bahwa Anda dapat menggunakan beberapa GABUNGAN dalam klausa mana; juga techonthenet.com (bos saya merekomendasikannya kepada saya, itulah cara saya menemukannya) memiliki tutorial SQL yang baik jika Anda memiliki pertanyaan lain dan Anda hanya ingin mencoba dan mencari tahu.

SELECT table1.column1
FROM table1
WHERE table1 > 0 (or whatever you want to specify)
INNER JOIN table1 
ON table1.column1 = table2.column1
Nathan
sumber
1

Ini adalah permintaan yang benar untuk bergabung dengan 3 tabel dengan id yang sama **

select a.empname,a.empsalary,b.workstatus,b.bonus,c.dateofbirth from employee a, Report b,birth c where a.empid=b.empid and a.empid=c.empid and b.empid='103';

tabel pertama karyawan. laporkan tabel kedua. kelahiran meja ketiga

Sri Siva
sumber
1
SELECT 
A.P_NAME AS [INDIVIDUAL NAME],B.F_DETAIL AS [INDIVIDUAL FEATURE],C.PL_PLACE AS [INDIVIDUAL LOCATION]
FROM 
[dbo].[PEOPLE] A
INNER JOIN 
[dbo].[FEATURE] B ON A.P_FEATURE = B.F_ID
INNER JOIN 
[dbo].[PEOPLE_LOCATION] C ON A.P_LOCATION = C.PL_ID
p.ajay
sumber
1

Kueri ini akan bekerja untuk Anda

Select b.id as 'id', u.id as 'freelancer_id', u.name as 
'free_lancer_name', p.user_id as 'project_owner', b.price as 
'bid_price', b.number_of_days as 'days' from User u, Project p, Bid b 
where b.user_id = u.id and b.project_id = p.id
Murtaza Manasawala
sumber
1
select products.product_id, product_name, price, created_at, image_name, categories.category_id, category_name,brands.brand_id, brand_name 
FROM products INNER JOIN categories USING (category_id) INNER JOIN brands USING(brand_id)
Eahiya
sumber
-5
select empid,empname,managename,[Management ],cityname  
from employees inner join Managment  
on employees.manageid = Managment.ManageId     
inner join CITY on employees.Cityid=CITY.CityId


id name  managename  managment  cityname
----------------------------------------
1  islam   hamza       it        cairo
Islam Hamza
sumber