2012-02-16 8 views
7

मैं जानता हूँ कि यह शायद बहुत ही बुनियादी है, लेकिन मैं चाहिए सो गया है, जब वे सिखाया है कि स्कूल :) मेंचुनें (एसक्यूएल सर्वर 2008) में दो टेबल्स कम्बाइन

अगर मैं दो तालिकाओं, उदाहरण के लिए इस तरह है:

तालिका 1 (उत्पादों)

id 
name 
price 
agentid 

तालिका 2 (एजेंट)

userid 
name 
email 

मैं एक परिणाम से कैसे मिलता है उन उत्पादों से टी जिनमें एजेंट का नाम और ईमेल शामिल है, जिसका अर्थ है कि products.agentid = agent.userid

आपके तेज़ उत्तरों के लिए धन्यवाद, लेकिन मैं WHERE भूल गया। मैं कैसे उदाहरण SELECT WHERE price < 100

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/ –

+0

-1 वहाँ इस के लिए वेब पर एक लाख ट्यूटोरियल होना चाहिए। –

उत्तर

18

आप उन तालिकाओं में शामिल होने के INNER JOIN खंड का उपयोग कर सकते कीमत फिल्टर

समर्थन करने के लिए संपादित। यह इस तरह से किया जाता है: दूसरे मामले आप दोनों तालिकाओं और उसके बाद से सभी पंक्तियों के एक प्राकृतिक उत्पाद बना रहे हैं में

select p.id, p.name as ProductName, a.userid, a.name as AgentName 
from products p, agents a 
where a.userid = p.agentid and p.price < 100 

नोट:

select p.id, p.name as ProductName, a.userid, a.name as AgentName 
from products p 
inner join agents a on a.userid = p.agentid 
where p.price < 100 

करने के लिए एक और तरीका है कि यह एक WHERE खंड के द्वारा होता है परिणाम फ़िल्टरिंग। पहले मामले में आप एक ही चरण में शामिल होने के दौरान सीधे परिणाम फ़िल्टर कर रहे हैं। डीबीएमएस आपके इरादे को समझेंगे (चाहे आप इसे हल करने के तरीके के बावजूद) और इसे सबसे तेज़ तरीके से संभालें।

+0

संपादन के लिए धन्यवाद। और यह एक आकर्षण की तरह काम करता है। पहले संस्करण के लिए गया :) – Jesper

+2

मैं दो प्रारूपों के लिए दूसरे प्रारूप के खिलाफ अनुशंसा करता हूं: (1) गलती से शामिल होने के मानदंडों को पूरी तरह से छोड़ना बहुत आसान है, और आश्चर्य है कि अचानक आपके पास कार्टेशियन उत्पाद क्यों है, और (2) ' इनर जॉइन प्रारूप प्रारूप फ़िल्टर मानदंडों से मापदंडों को अलग करना आसान बनाता है, जिससे क्वेरी दूसरों के लिए पार्स आसान हो जाती है। –

+0

पूरी तरह से सहमत हैं। इसे पढ़ने के लिए और भी आसान है और इसलिए, दूसरे की तुलना में पहले को समझने के लिए तेज़ी से –

6

के लिए शामिल होते हैं यह एक बहुत ही मौलिक INNER JOIN है:

SELECT 
    products.name AS productname, 
    price, 
    agent.name AS agentname 
    email 
FROM 
    products 
    INNER JOIN agent ON products.agentid = agent.userid 

मैं बुनियादी JOIN वाक्य रचना और अवधारणाओं की सलाह देते हैं। Here's a link to Microsoft's documentation, हालांकि आपके ऊपर जो कुछ है वह मानक एसक्यूएल के रूप में बहुत सार्वभौमिक है।

ध्यान दें कि INNER JOIN मानता है कि प्रत्येक उत्पाद में agentid संबंधित है जो पूर्ण नहीं है। यदि products में NULL agentid हैं, तो एजेंट के साथ उत्पादों को वापस करने के लिए LEFT OUTER JOIN का उपयोग करें।

+0

मैंने देखा कि आपने जॉइन से इनर जॉइन में अपना जवाब बदल दिया है, क्या आप बहुत संक्षेप में बता सकते हैं क्यों? और मुझे यह भी मदद करें कि WHERE क्लॉज में कहां रखा जाए ... – Jesper

+0

@ जेस्पर क्योंकि मैं एक सेकंड के लिए भूल गया था कि क्या SQL सर्वर ने किसी अन्य चीज़ की बजाय 'इनर जॉइन' के रूप में एक 'जॉइन' की व्याख्या की है। (अन्य आरडीबीएमएस 'एक' जॉइन 'के लिए निहित रूप से' इनर जॉइन 'करेंगे)। 'इनर जॉइन' केवल उन पंक्तियों को लौटाता है जिनमें दोनों टेबलों से मिलान मूल्य होते हैं। –

+1

'INNER' कीवर्ड एक आंतरिक शामिल होने के लिए वैकल्पिक है। मैं इसे स्पष्ट करने के लिए शामिल करना पसंद करता हूं और कोड को अधिक आत्म-दस्तावेज बनाना चाहता हूं।आंतरिक और बाहरी दोनों जोड़ों के साथ एक जटिल क्वेरी में, स्पष्ट होने से सभी प्रकार के दृश्यों को और अधिक दिखाई देता है। –

0
select ProductName=p.[name] 
, ProductPrice=p.price 
, AgentName=a.[name] 
, AgentEmail=a.email 
from products p 
inner join agent a on a.userid=p.agentid 
1
select p.name productname, p.price, a.name as agent_name, a.email 
from products p 
inner join agent a on (a.userid = p.agentid) 
1

यह प्रोड में थोड़ी बड़ी टेबल के लिए मेरा जुड़ना है। उम्मीद है कि यह मदद करता है।

SELECT TOP 1000 p.[id] 
     ,p.[attributeId] 
     ,p.[name] as PropertyName 
     ,p.[description] 
     ,p.[active], 
     a.[appId], 
     a.[activityId], 
     a.[Name] as AttributeName 
    FROM [XYZ.Gamification.V2B13.Full].[dbo].[ADM_attributeProperty] p 
    Inner join [XYZ.Gamification.V2B13.Full].[dbo].[ADM_activityAttribute] a 
    on a.id=p.attributeId 
    where a.appId=23098; 
संबंधित मुद्दे