मेरे पास निम्न क्वेरी है जो एकाधिक तालिकाओं में शामिल होने के लिए जुड़ने का उपयोग करती है
select DISTINCT
tblArticles.Article_Title,
tblArticles.Article_img,
tblArticles.Article_Content,
tblArticles.Article_Date_Created,
tblArticles.Article_Sequence,
tblWriters.Writer_Name,
tblTypes.Article_Type_Name,
tblimages.image_path as "Extra images"
from tblArticles inner join tblWriters
on tblArticles.Writer_ID_Fkey = tblWriters.Writer_ID inner join
tblArticleType on tblArticles.Article_ID = tblArticleType.Article_ID_Fkey inner join
tblTypes on tblArticleType.Article_Type_ID_Fkey = tblTypes.Article_Type_ID left outer join tblExtraImages
on tblArticles.Article_ID = tblExtraImages.Article_ID_Fkey left outer join tblimages
on tblExtraImages.image_id_fkey = tblimages.image_id
order by tblArticles.Article_Sequence, tblArticles.Article_Date_Created;
और मुझे निम्नलिखित परिणाम मिलते हैं:
यदि किसी लेख में एक से अधिक type_name हैं तो मुझे शेष अभिलेखों के लिए बार-बार कॉलम मिलेंगे। क्या इन तालिकाओं में शामिल होने का कोई और तरीका है जो ऐसा होने से रोकेगा?
2 जवाब
सबसे आसान तरीका यह है कि केवल Article_Type_Name
कॉलम को सेलेक्ट क्लॉज से हटा दें। यह SELECT DISTINCT
को डुप्लिकेट के रूप में पंक्तियों की पहचान करने और उन्हें समाप्त करने की अनुमति देता है।
एक अन्य विकल्प कॉलम पर एकत्रीकरण फ़ंक्शन का उपयोग करना है। हाल के SQL सर्वर संस्करणों में, STRING_AGG()
काम आता है (आप MIN()
या MAX()
का भी उपयोग कर सकते हैं):
select
tblArticles.Article_Title,
tblArticles.Article_img,
tblArticles.Article_Content,
tblArticles.Article_Date_Created,
tblArticles.Article_Sequence,
tblWriters.Writer_Name,
string_agg(tblTypes.Article_Type_Name, ',')
within group(order by tblTypes.Article_Type_Name) Article_Type_Name_List,
tblimages.image_path as Extra_Images
from ..
group by
tblArticles.Article_Title,
tblArticles.Article_img,
tblArticles.Article_Content,
tblArticles.Article_Date_Created,
tblArticles.Article_Sequence,
tblWriters.Writer_Name,
tblimages.image_path
आप यहां जो देख रहे हैं वह कार्टेशियन उत्पाद है; आप टेबल्स में इस तरह से जुड़ गए हैं कि एक तरफ से कई पंक्तियाँ दूसरी तरफ की पंक्तियों से मेल खाती हैं
यदि आप article_type के बारे में परवाह नहीं करते हैं, तो अन्य स्तंभों को समूहित करें और max(article_type) लें, या इसे उस सबक्वेरी में छोड़ दें जो लेख प्रकार वाली तालिका से अलग-अलग रिकॉर्ड का चयन करती है, जिसमें लेख प्रकार कॉलम शामिल नहीं है)। यदि आपका SQLS हाल ही में पर्याप्त है और आप उन सभी लेख प्रकारों को जानना चाहते हैं जिन्हें आप STRING_AGG कर सकते हैं उन्हें एक csv सूची में
अंतत: आप जो करना चुनते हैं वह इस बात पर निर्भर करता है कि आप उनके लिए क्या चाहते हैं; पंक्तियों को फ़िल्टर करें, या उन्हें नीचे समूहित करें
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।