मेरे पास 2 टेबल हैं, जो प्रश्नों द्वारा सचित्र हैं:
CT_सत्यापन
select ValidationID, Message from CT_Validation
ValidationID Message
======================================================
IP_Validator Not a valid IP address
NumbersOnly Invalid number.
SSN Not a valid social security number.
10Digits A 10-digit number is required.
CT_Validation_Lang
select ValidationID, LangID, Message from CT_Validation_Lang
ValidationID LangID Message
======================================================
SSN es Peligro es mi segundo nombre!
मैं एक जॉइन कैसे बनाऊंगा ताकि अगर LangID = 'es'
मैं वापस आ जाऊं:
ValidationID Message
======================================================
IP_Validator Not a valid IP address
NumbersOnly Invalid number.
SSN Peligro es mi segundo nombre!
10Digits A 10-digit number is required.
...लेकिन अगर LangID
रिक्त, शून्य, या 'es' के अलावा कुछ भी है, तो परिणाम सभी अंग्रेजी में वापस आ जाएंगे:
ValidationID Message
======================================================
IP_Validator Not a valid IP address
NumbersOnly Invalid number.
SSN Not a valid social security number.
10Digits A 10-digit number is required.
महत्वपूर्ण: कुंजी फ़ील्ड ValidationID
है और इस उदाहरण में महत्वपूर्ण कुंजी मान SSN
है क्योंकि यह दोनों तालिकाओं में मौजूद है।
किसी भी सलाह के लिए अग्रिम धन्यवाद।
4 जवाब
मुझे लगता है कि आप left join
और coalesce
चाहते हैं
select cv.ValidationID, coalesce(cvl.Message, cv.Message)
from CT_Validation cv
left join CT_Validation_Lang cvl on cv.ValidationID = cvl.ValidationID
and cvl.LangID = 'es'
यह CT_Validation_Lang
में से Message
का चयन करेगा यदि यह LangID
es
के लिए मौजूद है। अन्यथा यह Message
से CT_Validation
पर वापस आ जाएगा
CASE
के साथ एकतरफा
SELECT
ctv.ValidationID,
CASE WHEN ctvl.LangID = 'es' THEN ctvl.message ELSE ctv.message END AS Message
FROM CT_Validation ctv
LEFT JOIN CT_Validation_Lang ctvl ON ctv.ValidationId = ctvl.ValidationId
AND ctvl.LangID = 'es'
तुम कर सकते हो:
select v.ValidationID, coalesce(vl.message, v.message) as message
from CT_Validation v left join
CT_Validation_Lang vl
ON vl.ValidationID = v.ValidationID and vl.LangID = 'es';
यह स्पैनिश अनुवाद उपलब्ध होने पर CT_Validation_Lang
से संदेश चुन लेगा। अन्यथा, यह मूल संदेश चुनता है।
ISNULL()
फ़ंक्शन का उपयोग left join
के साथ करें।
select a.ValidationID, ISNULL(b.message, a.message)
from CT_Validation a
left join CT_Validation_Lang b on a.ValidationID = b.ValidationID and b.LangID = 'es'
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।