आप वास्तव में . के आधार पर ऐसा करने के कई तरीके हैं चाहना। बिना सामान्य कॉलम के, आपको यह तय करने की आवश्यकता है कि आप एक सामान्य कॉलम पेश करना चाहते हैं या उत्पाद प्राप्त करना चाहते हैं।
मान लें कि आपके पास दो टेबल हैं:
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 दो स्तंभ तालिका (या सीएसएस) प्रत्येक एक अलग डेटा तालिका के साथ।