sql - अजीब/गूढ़ शामिल वाक्यविन्यास




sql-server tsql (2)

मुझे यह पुराना एसक्यूएल कोड (तालिका नाम बदल दिया गया है) को दोहराने के लिए प्रदान किया गया है, और जोन वाक्यविन्यास कुछ मैंने पहले नहीं देखा है, और यह Google के लिए मुश्किल साबित हो रहा है:

select <stuff>

from A

inner join B
on A.ID = B.A_ID

inner join C  -- eh? No ON?

inner join D
ON C.C_ID = D.C_ID

ON B.C_ID = D.C_ID -- a second ON here? what?

जब मैंने कोड देखा, तो मुझे लगता था कि मुझे टूटा कोड भेजा जाएगा और यह नहीं चलेंगे।

लेकिन यह करता है (SQL सर्वर 2012)

यह क्या करता है? क्या यह लिखने का और अधिक समझदार / मानक तरीका है? यहाँ क्या हो रहा है?


असामान्य रूप से, यह पूरी तरह से वैध एसएसक्यूएल है। आम तौर पर आप इस दृष्टिकोण को देखते हैं जब आपके पास संबंधित तालिकाओं के एक बाहरी से जुड़ते हैं जो आंतरिक रूप से एक दूसरे से जुड़ जाते हैं यह लिखने का एक बेहतर आईएमएचओ तरीका होगा:

inner join B
   on A.ID = B.A_ID
inner join (C inner join D ON C.C_ID = D.C_ID) 
   ON B.C_ID = D.C_ID 

इससे जोड़ना तर्क स्पष्ट होता है - और यह पाठक को भी मदद करता है। इसके अतिरिक्त, यह पाठक को बताता है कि डेवलपर जानबूझकर ऐसा किया था तो ये खराब कोडन का एक उदाहरण हो। चीजें जो असामान्य हैं टिप्पणी करें बातें समझाओ अपनी शैली और उपयोग को बेहतर बनाने में सहायता के लिए किसी व्यक्ति को समय-समय पर आपके कोड की समीक्षा करें।

और आप इसे खंड में से तालिकाओं के क्रम को दोबारा करके "ठेठ" शैली में लिख सकते हैं - लेकिन मुझे लगता है कि वर्तमान संस्करण वास्तविक तालिका नामों के साथ अधिक तार्किक समझ में आता है।


मैंने इसे एक सहयोगी ने भाग लिया, जिसने इसे सोचा:

select <stuff>

from A

inner join B
on A.ID = B.A_ID

inner join ( C  -- put a bracket here...

inner join D
ON C.C_ID = D.C_ID

) -- and one here

ON B.C_ID = D.C_ID

या इसे थोड़ा अच्छा प्रारूपित करने के लिए:

select <stuff>

from A

inner join B
on A.ID = B.A_ID

inner join ( 
    C
    inner join D
    ON C.C_ID = D.C_ID
)
ON B.C_ID = D.C_ID

मैं इस तरह के "उप-जुड़ने" से परिचित नहीं था (मुझे नहीं पता कि इसे क्या कहा गया है), लेकिन यह बहुत अधिक पठनीय और स्पष्ट है





syntax