SQL Inner เข้าร่วมกับ 3 ตาราง?


330

ฉันพยายามที่จะเข้าร่วม 3 ตารางในมุมมอง; นี่คือสถานการณ์:

ฉันมีตารางที่มีข้อมูลของนักเรียนที่สมัครเพื่อใช้ชีวิตในวิทยาเขตวิทยาลัยนี้ ฉันมีตารางอีกตารางหนึ่งที่แสดงรายการการตั้งค่า Hall (3 ของพวกเขา) สำหรับนักเรียนแต่ละคน แต่การตั้งค่าแต่ละอย่างเหล่านี้เป็นเพียงหมายเลข ID และหมายเลข ID มีชื่อฮอลล์ที่สอดคล้องกันในตารางที่สาม (ไม่ได้ออกแบบฐานข้อมูลนี้ ... )

ค่อนข้างมากฉันมีINNER JOINตารางที่มีการตั้งค่าของพวกเขาและข้อมูลของพวกเขาผลที่ได้คืออะไรเช่น ...

 John Doe | 923423 | Incoming Student | 005

ไหนจะเป็น005 HallIDดังนั้นตอนนี้ผมต้องการให้ตรงHallIDกับตารางที่สามที่ตารางนี้มีและHallIDHallName

สวยมากฉันต้องการให้ผลลัพธ์ของฉันเป็นเหมือน ...

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

นี่คือสิ่งที่ฉันมีอยู่ในปัจจุบัน:

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

คำตอบ:


503

คุณสามารถทำสิ่งต่อไปนี้ได้ (ฉันเดาบนฟิลด์ของตารางเป็นต้น)

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

ตามคำขอของคุณสำหรับห้องโถงหลายแห่งคุณสามารถทำได้ด้วยวิธีนี้ คุณเพิ่งเข้าร่วมในตาราง Hall ของคุณหลายครั้งสำหรับแต่ละรหัสประจำห้อง:

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

1
สิ่งนี้ใช้ได้กับการตั้งค่าเดียว แต่ฉันจะแก้ไขการตั้งค่านี้เพื่อให้ทำงานกับการตั้งค่า 3 แบบได้อย่างไร (หนึ่งคอลัมน์สำหรับแต่ละการตั้งค่า)
Bob Sanders

1
@BobSanders เพียงปรับปรุงคำตอบของฉันแล้วถ้าคุณไม่ต้องการให้หมายเลข HallPref เพียงแค่วางคอลัมน์เหล่านั้น
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

27
คำตอบนี้ไม่มีคำอธิบายที่สมเหตุสมผลเพื่อแสดง OP ว่าจะบรรลุเป้าหมายดั้งเดิมได้อย่างไร
gaige

41

หากคุณมี 3 โต๊ะที่มีสมาชิกIDเข้าร่วมฉันคิดว่ามันจะเป็นเช่นนี้:

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

เพียงแทนที่*ด้วยสิ่งที่คุณต้องการรับจากตาราง



3

คุณเพียงแค่ต้องเข้าร่วมวงในที่สองที่เชื่อมโยงID Numberที่คุณมีตอนนี้ไปยังID Numberตารางที่สาม หลังจากนั้นแทนที่ID Numberด้วยHall Nameและ


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;

2

มีคำตอบมากมาย แต่บทเรียนโดยรวมดูเหมือนว่าคุณสามารถใช้การเข้าร่วมหลายรายการในส่วนคำสั่ง; ยัง techonthenet.com (เจ้านายของฉันแนะนำให้ฉันนั่นคือวิธีที่ฉันพบมัน) มีบทเรียน SQL ที่ดีถ้าคุณเคยมีคำถามอื่นและคุณเพียงแค่ต้องการลองและคิดออก

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

1

นี่คือแบบสอบถามที่ถูกต้องสำหรับการเข้าร่วม 3 ตารางที่มี ID เดียวกัน **

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';

ตารางแรกของพนักงาน รายงานตารางที่สอง ตารางที่สามเกิด


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

1

แบบสอบถามนี้จะทำงานให้คุณ

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

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)

-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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.