2012-04-17 11 views
209

मैं एक दृश्य में 3 टेबल में शामिल होने की कोशिश कर रहा हूं; यहां स्थिति है:एसक्यूएल इनर-इन 3 टेबल के साथ जुड़ें?

मेरे पास एक सारणी है जिसमें इस कॉलेज कैंपस पर रहने के लिए आवेदन करने वाले छात्रों की जानकारी शामिल है। मेरे पास एक और टेबल है जो प्रत्येक छात्र के लिए हॉल प्राथमिकताएं (उनमें से 3) सूचीबद्ध करता है। लेकिन इनमें से प्रत्येक प्राथमिकता केवल एक आईडी संख्या है, और आईडी संख्या में एक तीसरी तालिका में संबंधित हॉल नाम है (इस डेटाबेस को डिज़ाइन नहीं किया गया है ...)।

सुंदर ज्यादा, मैं आंतरिक उनकी प्राथमिकताओं के साथ मेज पर शामिल हों, और उनकी जानकारी, परिणाम कुछ की तरह है ...

John Doe | 923423 | Incoming Student | 005 

कहाँ 005 HallID होगा। तो अब मैं उस हॉलिड से तीसरे टेबल पर मेल खाना चाहता हूं, जहां इस तालिका में एक हॉलिड और हॉलनाम शामिल है।

तो काफी है, मैं अपने परिणाम की तरह बनना चाहता हूँ ...

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 
+20

काम करेंगे तुम सिर्फ एक दूसरे आंतरिक में शामिल होने की जरूरत है ... यह अगर तुम मदद करने के लिए आसान हो जाएगा आप जो एसक्यूएल पहले ही प्राप्त कर चुके हैं उसे दिखाएंगे। –

उत्तर

340

आप क्या कर सकते हैं निम्नलिखित (मैं, टेबल खेतों पर अनुमान लगाया आदि)

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 

संपादित करें:

कई हॉल के लिए आपके अनुरोध के आधार पर आप इसे इस तरह से कर सकते हैं। तुम बस प्रत्येक कमरे वरी आईडी के लिए हॉल मेज पर कई बार शामिल हो:

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 
+0

यह सिर्फ एक वरीयता के साथ काम करता है, लेकिन मैं इसे 3 वरीयताओं के साथ काम करने के लिए कैसे संपादित करना चाहता हूं?(प्रत्येक वरीयता के लिए एक कॉलम) –

+0

@ बॉबसैंडर्स ने अभी अपना जवाब अपडेट किया है, तो यदि आप नहीं चाहते हैं कि हॉलपैफ़ नंबर केवल उन कॉलम को छोड़ दें – Taryn

+0

यह पूरी तरह से काम करता है! बहुत बहुत ब्लूफेट धन्यवाद! –

20

है आप एक ही ID के साथ 3 टेबल है, तो है शामिल होने के लिए, मुझे लगता है कि यह इस तरह होगा:

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

बस टेबल से प्राप्त करने के लिए * को प्रतिस्थापित करें।

1

आपको केवल दूसरे आंतरिक जुड़ने की आवश्यकता है जो ID Number को लिंक करता है जो आपके पास अब तीसरी तालिका के ID Number पर है। बाद में, Hall Name और देखा :)

द्वारा ID Number की जगह
28
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 
+11

इस उत्तर में ओपी को दिखाने के लिए उचित स्पष्टीकरण की कमी है कि मूल लक्ष्यों को कैसे प्राप्त किया जाए। – gaige

0

यह सही क्वेरी है एक ही आईडी **

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

कर्मचारी पहले की मेज के साथ 3 तालिका में शामिल होने के लिए। दूसरी तालिका की रिपोर्ट करें। जन्म तीसरे तालिका

-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 
3
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 
0
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; 
0
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 
0

इस क्वेरी के लिए आप

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 
संबंधित मुद्दे