मेरे पास 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 है क्योंकि यह दोनों तालिकाओं में मौजूद है।

किसी भी सलाह के लिए अग्रिम धन्यवाद।

1
HerrimanCoder 18 अक्टूबर 2017, 04:44

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 पर वापस आ जाएगा

2
FuzzyTree 18 अक्टूबर 2017, 04:57

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'
1
SQLChao 18 अक्टूबर 2017, 05:01

तुम कर सकते हो:

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 से संदेश चुन लेगा। अन्यथा, यह मूल संदेश चुनता है।

0
Gordon Linoff 18 अक्टूबर 2017, 04:57

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'
0
Andy Refuerzo 18 अक्टूबर 2017, 05:09