मान लें कि मेरे पास तीन टेबल ए, बी, और सी हैं। प्रत्येक में दो कॉलम हैं: एक प्राथमिक कुंजी और डेटा का कुछ अन्य टुकड़ा। उनमें से प्रत्येक पंक्तियों की एक ही संख्या है। यदि प्राथमिक कुंजी पर JOIN
ए और बी, मुझे पंक्तियों की एक ही संख्या के साथ समाप्त होना चाहिए जैसा कि उनमें से किसी एक में है (जैसा कि एरो * बीरो के विपरीत है)।एकाधिक-टेबल डुप्लिकेट पंक्तियों का उत्पादन क्यों करती है?
अब, अगर A JOIN B
C
के साथ, मैं डुप्लिकेट पंक्तियों के साथ क्यों समाप्त करूं? मैंने कई बार इस समस्या में भाग लिया है और मुझे समझ में नहीं आता है। ऐसा लगता है कि इसे JOIN
आईएन A
और B
के समान परिणाम उत्पन्न करना चाहिए क्योंकि इसकी पंक्तियों की संख्या समान है, लेकिन इसके बजाय, डुप्लिकेट का उत्पादन होता है।
प्रश्नों है कि इस तरह के परिणाम स्वरूप
SELECT *
FROM M
INNER JOIN S
on M.mIndex = S.mIndex
INNER JOIN D
ON M.platformId LIKE '%' + D.version + '%'
INNER JOIN H
ON D.Name = H.Name
AND D.revision = H.revision
यहाँ तालिकाओं के लिए स्कीमा हैं के हैं। एच शामिल एक ऐतिहासिक तालिका सब कुछ है कि डी में कभी था प्रत्येक विकास तथा प्रत्येक एम
टेबल एम
[mIndex] [int] NOT NULL PRIMARY KEY,
[platformId] [nvarchar](256) NULL,
[ip] [nvarchar](64) NULL,
[complete] [bit] NOT NULL,
[date] [datetime] NOT NULL,
[DeployId] [int] NOT NULL PRIMARY KEY REFERENCES D.DeployId,
[source] [nvarchar](64) NOT NULL PRIMARY KEY
टेबल एस
[order] [int] NOT NULL PRIMARY KEY,
[name] [nvarchar](64) NOT NULL,
[parameters] [nvarchar](256) NOT NULL,
[Finished] [bit] NOT NULL,
[mIndex] [int] NOT NULL PRIMARY KEY,
[mDeployId] [int] NOT NULL PRIMARY KEY,
[Date] [datetime] NULL,
[status] [nvarchar](10) NULL,
[output] [nvarchar](max) NULL,
[config] [nvarchar](64) NOT NULL PRIMARY KEY
के लिए एक एस के लिए कई एम पंक्तियों रहे हैं युक्त है
टेबल डी
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[branch] [nvarchar](64) NOT NULL,
[revision] [int] NOT NULL,
[version] [nvarchar](64) NOT NULL,
[path] [nvarchar](256) NOT NULL
टेबल एच
[IdDeploy] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](64) NOT NULL,
[version] [nvarchar](64) NOT NULL,
[path] [nvarchar](max) NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NULL,
[Revision] [nvarchar](64) NULL,
मैंने टेबल और पोस्ट शुरू में नहीं पोस्ट किया क्योंकि मुझे अपने लिए इस समस्या को समझने और भविष्य में इसे टालने में अधिक दिलचस्पी है।
आप जो पूर्ण क्वेरी चल रहे हैं वह क्या है? – mikeyq6
यह आपके द्वारा उपयोग किए जा रहे जोड़ों के प्रकार पर बहुत निर्भर करता है। –
आप कार्टेशियन जुड़ सकते हैं। विकी पेज में इसके उदाहरण और अन्य प्रकार के शामिल हैं - http://en.wikipedia.org/wiki/Join_(SQL)#Cross_join –