मेरे पास समान कॉलम नाम वाले दो टेबल हैं और मुझे बाएं टेबल से रिकॉर्ड वापस करने की आवश्यकता है जो सही तालिका में नहीं मिलती हैं? मेरे पास प्राथमिक कुंजी (कॉलम) है जो मुझे दोनों टेबलों की तुलना करने में मदद करेगी। कौन सा शामिल होना पसंद है?एसक्यूएल - बाएं टेबल से पंक्तियों को वापस कैसे करें सही तालिका में नहीं मिला?
उत्तर
आप T-SQL के लिए पूछ रहे हैं तो पहले बुनियादी बातों पर ध्यान देता है।
- एक
cross join
सब का सबसे सरल है: वहाँ तीन प्रकार यहां प्रत्येक मिलती है के रूप में तार्किक प्रसंस्करण चरणों में से अपने आप सेट के साथ कर रहे हैं। यह केवल एक लॉजिकल क्वेरी प्रसंस्करण चरण लागू करता है-Cartesian Product
यह चरण दो तालिकाओं पर चलता है जो शामिल होने के लिए इनपुट के रूप में प्रदान किए जाते हैं और दोनों के कार्टेसियन उत्पाद का उत्पादन करते हैं। यही है, एक इनपुट से प्रत्येक पंक्ति दूसरे से सभी पंक्तियों से मेल खाती है। तो यदि आपके पास एक टेबल और एन पंक्तियों में एम पंक्तियां हैं, तो आपको परिणाम में एम × एन पंक्तियां मिलती हैं। - फिर
Inner joins
हैं: वे दो तार्किक क्वेरी प्रोसेसिंग चरणों लागू होते हैं: दो इनपुट तालिकाओं के बीचA Cartesian product
में के रूप में एक क्रॉस में शामिल होने, और फिर इसेfilters
पंक्तियों एक विधेय है कि आपON
खंड (भीJoin condition
रूप में जाना) में निर्दिष्ट के आधार पर। - अगला के तीसरे प्रकार मिलती
Outer Joins
आता है: एकouter join
में, आप कीवर्डLEFT OUTER JOIN
,RIGHT OUTER JOIN
, या तालिका नामों के बीचFULL OUTER JOIN
का उपयोग करके एकpreserved
तालिका के रूप में एक मेज निशान।OUTER
कीवर्डoptional
है।LEFT
कीवर्ड का अर्थ है किleft table
की पंक्तियां संरक्षित हैं;RIGHT
कीवर्ड का अर्थ है किright table
में पंक्तियां संरक्षित हैं; औरFULL
कीवर्ड का मतलब है किboth
में पंक्तियोंleft
औरright
टेबल एकouter join
की preserved.The तीसरे तार्किक क्वेरी प्रोसेसिंग चरण संरक्षित तालिकाON
विधेय के आधार पर अन्य तालिका में मैचों नहीं मिला से पंक्तियों की पहचान करेंगे। यह चरण उन पंक्तियों को शामिल होने वाले पहले दो चरणों द्वारा उत्पादित परिणाम तालिका में जोड़ता है, औरNULL
अंक उन बाहरी पंक्तियों में शामिल होने के गैर-संरक्षित पक्ष से गुणों के लिए प्लेसहोल्डर्स के रूप में उपयोग करता है।
अगर हम सवाल को देखो: बायां तालिका जो सही तालिका में नहीं पाए जाते हैं में शामिल होने के दाईं ओर से विशेषताओं के लिए Left outer join
का उपयोग करें और NULL
मूल्यों के साथ पंक्तियों को फ़िल्टर से रिकॉर्ड वापस जाने के लिए ।
यह पृष्ठ विभिन्न प्रकार के प्रकारों के साथ-साथ वेन आरेख विज़ुअलाइजेशन की मदद करने के लिए एक सभ्य टूटना देता है ... अच्छी तरह से ... जुड़ने में अंतर को कल्पना करें।
टिप्पणियों के मुताबिक यह इसकी आवाज़ से काफी बुनियादी क्वेरी है, इसलिए आपको जुड़ने और वास्तव में क्या मतलब है के बीच अंतर को समझने की कोशिश करनी चाहिए।
बाहर http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
आप इस तरह के रूप में एक प्रश्न के लिए देख रहे जांच:
DECLARE @table1 TABLE (test int)
DECLARE @table2 TABLE (test int)
INSERT INTO @table1
(
test
)
SELECT 1
UNION ALL SELECT 2
INSERT INTO @table2
(
test
)
SELECT 1
UNION ALL SELECT 3
-- Here's the important part
SELECT a.*
FROM @table1 a
LEFT join @table2 b on a.test = b.test -- this will return all rows from a
WHERE b.test IS null -- this then excludes that which exist in both a and b
-- Returned results:
2
मैं कुछ अन्य उत्तरों के लिए कोड उदाहरण के अलावा कुछ भी नहीं जोड़ सकता: हालांकि, मुझे लगता है कि यह कार्रवाई में इसे देखने में उपयोगी हो सकता है (अन्य उत्तरों, मेरी राय में, बेहतर है क्योंकि वे इसे समझाते हैं)।
DECLARE @testLeft TABLE (ID INT, SomeValue VARCHAR(1))
DECLARE @testRight TABLE (ID INT, SomeOtherValue VARCHAR(1))
INSERT INTO @testLeft (ID, SomeValue) VALUES (1, 'A')
INSERT INTO @testLeft (ID, SomeValue) VALUES (2, 'B')
INSERT INTO @testLeft (ID, SomeValue) VALUES (3, 'C')
INSERT INTO @testRight (ID, SomeOtherValue) VALUES (1, 'X')
INSERT INTO @testRight (ID, SomeOtherValue) VALUES (3, 'Z')
SELECT l.*
FROM
@testLeft l
LEFT JOIN
@testRight r ON
l.ID = r.ID
WHERE r.ID IS NULL
अगर आप Mysql अंतिम पंक्ति की जगह का उपयोग कर रहे \t कहां r.ID शून्य है \t कहां IsNull (r.ID) – Ananda
अधिक इस लेख को पढ़ने के लिए कृपया इस
SELECT f.*
FROM first_table f LEFT JOIN second_table s ON f.key=s.key
WHERE s.key is NULL
का प्रयास करें: Joins in Sql Server
कुंजी है शून्य है नहीं = शून्य –
@HaydenThring s.key = शून्य कोई मिलता-जुलता पंक्ति का अर्थ है साथ दूसरी तालिका में पाया गया, इसलिए स्थिति सच है मुझे लगता है कि –
क्षमा करें मेरा मतलब है "काम करने के लिए यह कुंजी है" इस जवाब में एक चर के रूप में "कुंजी" के उपयोग से उलझन में नहीं है –
मैं भी मौजूद नहीं है का उपयोग करना चाहते। जब प्रदर्शन की बात आती है तो सूचकांक सही ढंग से इसे बाएं जॉइन या बेहतर के रूप में करना चाहिए। इसके अलावा पढ़ने के लिए आसान है।
SELECT Column1
FROM TableA a
WHERE NOT EXISTS (SELECT Column1
FROM Tableb b
WHERE a.Column1 = b.Column1
)
यह वास्तविक जीवन काम से एक उदाहरण है, मैं उन है कि पिछले 6 महीनों में हमारी साइट से खरीदा की एक सूची की आपूर्ति करने के लिए कहा गया था, लेकिन पिछले 3 महीने में नहीं।
मेरे लिए, सबसे समझ में आता है जिस तरह से मैं के बारे में सोच सकते हैं, ताकि तरह है:
--Users that bought from us 6 months ago and between 3 months ago.
DECLARE @6To3MonthsUsers table (UserID int,OrderDate datetime)
INSERT @6To3MonthsUsers
select u.ID,opd.OrderDate
from OrdersPaid opd
inner join Orders o
on opd.OrderID = o.ID
inner join Users u
on o.BuyerID = u.ID
where 1=1
and opd.OrderDate BETWEEN DATEADD(m,-6,GETDATE()) and DATEADD(m,-3,GETDATE())
--Users that bought from us in the last 3 months
DECLARE @Last3MonthsUsers table (UserID int,OrderDate datetime)
INSERT @Last3MonthsUsers
select u.ID,opd.OrderDate
from OrdersPaid opd
inner join Orders o
on opd.OrderID = o.ID
inner join Users u
on o.BuyerID = u.ID
where 1=1
and opd.OrderDate BETWEEN DATEADD(m,-3,GETDATE()) and GETDATE()
अब, मेरे हाथ में इन 2 टेबल मैं मेज से केवल उन पाने के लिए @ 6To3MonthsUsers की जरूरत के साथ कि @ Last3MonthsUsers तालिका में नहीं हैं।
है कि प्राप्त करने के लिए 2 सरल तरीके हैं:
का उपयोग करते हुए वाम शामिल हों:
select distinct a.UserID from @6To3MonthsUsers a left join @Last3MonthsUsers b on a.UserID = b.UserID where b.UserID is null
- नहीं में
:
select distinct a.UserID from @6To3MonthsUsers a where a.UserID not in (select b.UserID from @Last3MonthsUsers b)
दोनों तरीकों मुझे मिल जाएगा वही परिणाम, मैं व्यक्तिगत रूप से पसंद करता हूं दूसरा तरीका क्योंकि यह अधिक पठनीय है।
- 1. एसक्यूएल सर्वर: बाएं तालिका
- 2. टेबल स्कैन तालिका में से अधिक पंक्तियों को कैसे वापस कर सकता है?
- 3. बाएं बाहरी प्राथमिक तालिका से सभी रिकॉर्ड्स वापस नहीं लौटें
- 4. बाएं बाहरी जॉइन मेरी बाएं टेबल से सभी पंक्तियां वापस नहीं करता है?
- 5. MySQL - बाएं में एक पूरी तालिका को उपनाम कैसे करें
- 6. बाएं को सीमित करें पहली तालिका में शामिल हों
- 7. जॉइन स्टेटमेंट (एसक्यूएल) में कौन सी तालिका बिल्कुल "बाएं" टेबल और "दाएं" तालिका है?
- 8. डुप्लीकेट पंक्तियों को कैसे हटाएं और तालिका
- 9. बाएं टेबल में मौजूद एक बाएं बाहरी जॉइन अधिक रिकॉर्ड कैसे लौटा सकता है?
- 10. परमाणु रूप से एक टेबल से दूसरे टेबल पर पंक्तियों को कैसे स्थानांतरित करें?
- 11. एसक्यूएल सर्वर: पंक्तियों को पंक्तियों में कनवर्ट करें
- 12. 2 से अधिक टेबल के साथ बाएं जॉइन कैसे करें?
- 13. एचटीएमएल मल्टीलाइन्स टेबल (रोशन) - सही तरीके से ज़ेबरा कैसे करें?
- 14. टी-एसक्यूएल: संग्रहीत प्रक्रिया से 0 पंक्तियों को कैसे वापस करें, और XACT_ABORT और TRY/CATCH
- 15. एसक्यूएल: एक टेबल से दूसरी तालिका में कॉपी करने के लिए कैसे करें
- 16. संग्रहित प्रक्रिया से अस्थायी तालिका को वापस कैसे करें
- 17. तालिका पंक्तियों का उपयोग कर एसक्यूएल फोरच
- 18. टेबलए से टेबल-आर्काइव में पंक्तियों को ले जाएं
- 19. ओरेकल पीएल/एसक्यूएल फ़ंक्शन से किसी मौजूदा तालिका से रिकॉर्ड कैसे वापस करें?
- 20. मैं एसक्यूएल कॉलम को पंक्तियों में कैसे बदलूं?
- 21. एसक्यूएल - एक तालिका में दो टेबल सामग्री मर्ज करें/देखें
- 22. तालिका में सभी पंक्तियों को गलती से कैसे हटाएं
- 23. एसक्यूएल एक बाएं जॉइन
- 24. बाएं आवेदन करने से पहले फ़िल्टर टेबल
- 25. एसक्यूएल: चयन लेनदेन जहां पंक्तियों में एक ही तालिका के अंदर मानदंडों में से नहीं हैं
- 26. एसक्यूएल का उपयोग कर डीबी टेबल से अप्रयुक्त पंक्तियों को कैसे हटाएं?
- 27. एसक्यूएल सर्वर प्रबंधन स्टूडियो में तालिका में मूल्यों को त्वरित रूप से कैसे संपादित करें?
- 28. बाएं बाहरी जुड़ें - दूसरी तालिका में अस्तित्व के लिए बुलियन कैसे वापस करें?
- 29. mysql :: तालिका में सम्मिलित करें, किसी अन्य तालिका से डेटा?
- 30. एसक्यूएल सर्वर: टेबल ए से आईडी की संख्या की गणना करें तालिका बी
काफी बुनियादी क्वेरी लगता है ... आपने अभी तक क्या प्रयास किया है? –
बाएं बाहरी जुड़ने का उपयोग करें – Siva
@ शिव बाएं बाहरी बाएं बाएं टेबल से सभी पंक्तियों को वापस लौटाता है भले ही सही तालिका में कोई मिलान रिकॉर्ड न हो। मुझे बाएं टेबल में मिले मिलान रिकॉर्ड लौटने की ज़रूरत है लेकिन सही तालिका में नहीं मिली है। – CloudJedi