वांछित परिणाम प्राप्त करने के लिए एक एसक्यूएल कैसे शामिल करें? - एसक्यूएल, tsql, शामिल हों

मेरे पास 2 चयन हैं जो लौट रहे हैं:

SELECT_A (COLUMN_A,COLUMN_B, SELECT_A_JOIN_COLUMN)

SELECT_B (COLUMN_A,COLUMN_B, SELECT_B_JOIN_COLUMN)

वांछित परिणाम:

Result  (COLUMN_A,COLUMN_B,SELECT_A_JOIN_COLUMN,SELECT_B_JOIN_COLUMN)

उदाहरण:

SELECT_A परिणाम:

A B zxc
A B rty

SELECT_B परिणाम:

A B yui
A B hjk

वांछित परिणाम:

A B zxc null
A B rty null
A B null yui
A B null hjk

इसे कैसे प्राप्त करें?

यह लगभग संघ की तरह है, लेकिन क्या मैं इसे शामिल होने के साथ कर सकता हूं?

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

ठीक। तो मुझे अपना लक्ष्य बताएं।मैं एक पदानुक्रमित पेड़ लौटने की क्वेरी बनाना चाहता हूं। ऐसा इसलिए है क्योंकि LINQ2Entities क्वेरी के लिए अतिरिक्त धीमी और अक्षम एसक्यूएल उत्पन्न कर रहा है जिसमें कई नेविगेशन गुणों के लिए शामिल है।

तो मैं सबसे पहले जो हासिल करना चाहता हूं वह पेड़ प्राप्त करना है ... किसी भी तरह।

उदाहरण:

मैं परिणाम प्राप्त करना चाहता हूं:

ObjectId | ChildType1Id | ChildType1Field | ChildType2Id | ChildType2Field

1          34          asd          null        null
1          12          xcv          null        null
1          5           klk          null        null
1          null        null         6           vbn
1          null        null         7           jkh

मुझे अभी तक बाएं जुड़ने के साथ 2 सरल चयन मिल गए हैं जो मुझे वापस लौटाते हैं:

ObjectId  | ChildType1Id | ChildType1Field
1          34             asd
1          12             zcv
1          5              klk

तथा

ObjectId  | ChildType2Id | ChildType2Field
1             6           vbn
1             7           jkh

अगर मेरे पास और बच्चे के प्रकार होंगे तो क्या होगा?प्रत्येक बच्चे के लिए ऐसा लगता है कि मुझे एक संघ का उपयोग करने की आवश्यकता है। अगर मेरे पास 50 कॉलम होंगे, तो मुझे यूनियन में उन सभी कॉलमों को बताना होगा (क्योंकि इसे कॉलम की एक ही संख्या की आवश्यकता है)। क्या मैं उन सभी यूनियनों को कुछ ऐसे चीज़ों के साथ बनाने से बच सकता हूं जैसे कि मुझे आवश्यक कॉलम जोड़ने के लिए शामिल हों (अगली बालरोधी कॉलम)?

3 अलग-अलग बच्चों के लिए वांछित परिणाम टाइप:

ObjectId|ChildType1Id|ChildType1Field|ChildType2Id|ChildType2Field|ChildType3Id|ChildType3Field

1          34          asd          null        null       null         null
1          12          xcv          null        null       null         null
1          5           klk          null        null       null         null
1          null        null         6           vbn        null         null
1          null        null         7           jkh        null         null
1          null        null         null        null        5           iop
1          null        null         null        null        9           klp

किसी भी मदद की सराहना की।

उत्तर:

जवाब के लिए 5 № 1

इसे एक के रूप में करने के लिए JOIN एक से अधिक convoluted है UNION (एसक्यूएल फिडल)

SELECT COALESCE(A.COLUMN_A, B.COLUMN_A) AS COLUMN_A,
COALESCE(A.COLUMN_B, B.COLUMN_B) AS COLUMN_B,
SELECT_A_JOIN_COLUMN,
SELECT_B_JOIN_COLUMN
FROM   SELECT_A A
FULL OUTER JOIN SELECT_B B
ON SELECT_A_JOIN_COLUMN = SELECT_B_JOIN_COLUMN

उत्तर № 2 के लिए 1

यह एक यूनियन है।

SELECT COLUMN_A, COLUMN_B, SELECT_A_JOIN_COLUMN, NULL
FROM SELECT_A
UNION ALL
SELECT COLUMN_A, COLUMN_B, NULL, SELECT_B_JOIN_COLUMN
FROM SELECT_B;

जवाब के लिए 0 № 3
select COLUMN_A, COLUMN_B, SELECT_A_JOIN_COLUMN, null
from SELECT_A
union all
select COLUMN_A, COLUMN_B, null, SELECT_B_JOIN_COLUMN
from SELECT_B

जवाब के लिए 0 № 4

मैं नहीं देखता कि आप क्या चाहते हैं एक जुड़ाव है। यह संघ यह करता है:

select *
from ((select COLUMN_A,COLUMN_B, SELECT_A_JOIN_COLUMN, NULL as SELECT_B_JOIN_COLUMN
from SELECT_A
) union all
(select COLUMN_A,COLUMN_B, NULL as SELECT_A_JOIN_COLUMN, SELECT_B_JOIN_COLUMN
from SELECT_B
)
) t
order by 1, 2, 3, 4

संबंधित सवाल
सबसे लोकप्रिय