/ / SQL सर्वर एकाधिक तालिका को समझना - एसक्यूएल-सर्वर, जुड़ें

SQL सर्वर एकाधिक तालिका को समझना - SQL सर्वर, जुड़ें

मुझे कुछ स्पष्टीकरण की आवश्यकता है कि SQL सर्वर में एकाधिक लोग कैसे काम करते हैं।

मेरे पास 4 टेबल हैं, टेबल ए, टेबल बी, टेबल सी, टेबल डी। सभी इंटरसंबंधित हैं (ए-बी-सी-डी)।

तालिका ए और बी समूह (चालान) और तालिका बी और सी का एक हिस्सा है (ऑर्डर)

टेबल ए में 100 रिकॉर्ड हैं, बी में 9 0 है, सी में 60 है और डी में 70 है।

ए और बी के बीच संबंध कई रिश्तों में से एक है। ए- = बी, और व्यक्तिगत रूप से मैं इन्हें शामिल करना चाहता हूं (क्योंकि वे चालान का हिस्सा हैं)

डी आंतरिक है जिसमें से कई रिश्तों में से एक है। सी = -डी और व्यक्तिगत रूप से मैं इन्हें शामिल करना चाहता हूं (क्योंकि वे ऑर्डर का हिस्सा हैं)

बी और सी के बीच संबंध एक से एक है और मैंबाएं से जुड़ना चाहते हैं। यानी सी के लापता रिकॉर्ड में बी और नल के सभी रिकॉर्ड एक ही समय में, सभी तालिकाओं में शामिल हों। तो, मुझे कुल 9 0 रिकॉर्ड चाहिए (तालिका बी और नल से सभी जहां वे मौजूद नहीं हैं)

A-=B--C=-D

मेरी समझ यह थी कि मैं निम्नलिखित कोड का उपयोग कर सकता था।

SELECT *
FROM Table A AS A
INNER JOIN Table B AS B ON A.id = B.id
LEFT JOIN Table C AS C ON B.Cid = C.Cid AND B.key = C.key
INNER JOIN Table D AS D ON C.Did = D.Did

हालांकि, यह गलत परिणाम उत्पन्न करने लगते हैं। मुझे 70 रिकॉर्ड मिले। सी और डी के बीच जुड़ने के बाद, प्रश्न में अंतिम बार शामिल होने के बावजूद मुझे 100 रिकॉर्ड मिल गए।

SELECT *
FROM Table A AS A
INNER JOIN Table B AS B ON A.id = B.id
LEFT JOIN Table C AS C ON B.Cid = C.Cid AND B.key = C.key
LEFT JOIN Table D AS D ON C.Did = D.Did

यह क्यों हो रहा है और 90 रिकॉर्ड प्राप्त करने का सही तरीका क्या है, यानी तालिका बी और नल के सभी रिकॉर्ड जहां कभी गायब हैं।

उत्तर:

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

आपको सी और डी के बीच एक सबक्वायरी में शामिल होना होगा, फिर इसे बी में शामिल करें। ऐसा कुछ:

SELECT *
FROM Table A AS A
INNER JOIN Table B AS B ON A.id = B.id
LEFT JOIN (
SELECT C.Cid, C.key
FROM Table C AS C
JOIN Table D AS D ON C.Did = D.Did ) AS CD ON B.Cid = CD.Cid AND B.key = CD.key

आप इक्विजॉइन नहीं कर सकते हैं, फिर एसक्यूएल में मूलभूत (या नेस्टेड) ​​वाक्यविन्यास के बिना संबंधों में समेकित हो सकते हैं।


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

ऐसा कुछ करने का प्रयास करें, ऐसा लगता है जैसे टेबल बी आपकी आधार तालिका है और तालिका ए नहीं है

SELECT *
FROM Table B AS B
INNER JOIN Table A AS A ON B.id = A.id
LEFT JOIN (
SELECT C.Cid, C.key
FROM Table C AS C
INNER JOIN Table D AS D ON C.Did = D.Did ) AS CD ON B.Cid = CD.Cid AND B.key = CD.key

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

आप शायद इसकी तलाश कर रहे हों

SELECT *
FROM Table A AS A
INNER JOIN Table B AS B
ON A.id = B.id
LEFT  JOIN Table C AS C
INNER JOIN Table D AS D
ON C.Did = D.Did
ON B.Cid = C.Cid
AND B.key = C.key