Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

दो तालिकाओं को मिलाएं जिनमें कोई सामान्य फ़ील्ड नहीं है

आप वास्तव में . के आधार पर ऐसा करने के कई तरीके हैं चाहना। बिना सामान्य कॉलम के, आपको यह तय करने की आवश्यकता है कि आप एक सामान्य कॉलम पेश करना चाहते हैं या उत्पाद प्राप्त करना चाहते हैं।

मान लें कि आपके पास दो टेबल हैं:

parts:              custs:
+----+----------+   +-----+------+
| id | desc     |   |  id | name |
+----+----------+   +-----+------+
|  1 | Sprocket |   | 100 | Bob  |
|  2 | Flange   |   | 101 | Paul |
+----+----------+   +-----+------+

वास्तविक स्तंभों को भूल जाइए क्योंकि आपके होने . होने की सबसे अधिक संभावना है इस मामले में ग्राहक/आदेश/आंशिक संबंध; मैंने अभी-अभी उन स्तंभों का उपयोग इसे करने के तरीकों को स्पष्ट करने के लिए किया है।

एक कार्टेशियन उत्पाद पहली तालिका में प्रत्येक पंक्ति के साथ दूसरी पंक्ति में प्रत्येक पंक्ति से मेल खाएगा:

> select * from parts, custs;
      id desc     id  name
      -- ----     --- ----
      1  Sprocket 101 Bob
      1  Sprocket 102 Paul
      2  Flange   101 Bob
      2  Flange   102 Paul

आप शायद यही नहीं चाहते हैं क्योंकि 1000 भागों और 100 ग्राहकों के परिणामस्वरूप 100,000 पंक्तियों में बहुत सारी डुप्लिकेट जानकारी होगी।

वैकल्पिक रूप से, आप केवल डेटा को आउटपुट करने के लिए एक संघ का उपयोग कर सकते हैं, हालांकि साथ-साथ नहीं (आपको यह सुनिश्चित करने की आवश्यकता होगी कि कॉलम प्रकार दो चयनों के बीच संगत हैं, या तो तालिका कॉलम को संगत बनाकर या चयन में उन्हें मजबूर करके ):

> select id as pid, desc, null as cid, null as name from parts
  union
  select null as pid, null as desc, id as cid, name from custs;
    pid desc     cid name
    --- ----     --- ----
                 101 Bob 
                 102 Paul
    1   Sprocket
    2   Flange

कुछ डेटाबेस में, आप साथ-साथ रिकॉर्ड का मिलान करने के लिए एक पंक्ति/राउनम कॉलम या छद्म-स्तंभ का उपयोग कर सकते हैं, जैसे:

id desc     id  name
-- ----     --- ----
1  Sprocket 101 Bob
2  Flange   101 Bob

कोड कुछ इस तरह होगा:

select a.id, a.desc, b.id, b.name
from parts a, custs b
where a.rownum = b.rownum;

यह अभी भी पसंद है एक कार्टेशियन उत्पाद लेकिन where क्लॉज सीमित करता है कि परिणाम बनाने के लिए पंक्तियों को कैसे जोड़ा जाता है (इसलिए कार्टेशियन उत्पाद बिल्कुल नहीं)।

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

मुझे लगता है कि करने के लिए आदर्श बात दोनों तालिकाओं में एक कॉलम जोड़ना होगा जो यह निर्दिष्ट करता है कि संबंध क्या है। यदि कोई वास्तविक संबंध नहीं है, तो संभवतः आपके पास उन्हें SQL के साथ-साथ रखने की कोशिश करने में कोई व्यवसाय नहीं है।

यदि आप चाहते हैं कि उन्हें एक रिपोर्ट या वेब पेज (दो उदाहरण) में साथ-साथ प्रदर्शित किया जाए, तो ऐसा करने के लिए सही टूल वह है जो आपकी रिपोर्ट या वेब पेज उत्पन्न करता है, दो स्वतंत्र के साथ मिलकर दो असंबंधित तालिकाओं को प्राप्त करने के लिए SQL क्वेरी। उदाहरण के लिए, बीआईआरटी (या क्रिस्टल या जैस्पर) में एक दो-स्तंभ ग्रिड प्रत्येक एक अलग डेटा तालिका के साथ, या एक HTML दो स्तंभ तालिका (या सीएसएस) प्रत्येक एक अलग डेटा तालिका के साथ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में FORMAT () द्वारा समर्थित कस्टम दिनांक/समय प्रारूप स्ट्रिंग्स

  2. SMALLDATETIMEFROMPARTS () SQL सर्वर में उदाहरण (T-SQL)

  3. #temptable और ##TempTable में अंतर?

  4. SQL सर्वर में PRINT स्टेटमेंट का अवलोकन

  5. एक डीबीए के जीवन के बारे में उल्लसित ट्वीट्स