2017-10-18 165 views
1

我有2个表,通过查询说明:如何根据记录存在从2个表中选择1条记录?

CT_Validation

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,因为它存在于两个表中。

在此先感谢您的任何建议。

+0

的[我可以使用CASE语句JOIN条件?(可能的复制https://stackoverflow.com/questions/10256848/can-i-use-case-statement-in-a-join-条件) –

回答

2

我想你想left join和​​3210

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,如果它存在LangIDes。连同left join

select 
    ctv.ValidationID, 
    coalesce(
      (select 
      ctvl.Message 
      from 
      CT_Validation_Lang ctvl 
      where 
      ctvl.ValidationID = ctv.ValidationID and 
      LangID = 'es' 
      ), 
      ctv.Message, ' ') as Message 
    from 
    CT_Validation ctv; 
+0

工程太棒了!谢谢FuzzyTree。 – HerrimanCoder

0

你可以这样做:

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

喜欢的东西回落到Message

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' 
1

一种方式与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' 
0

使用ISNULL()功能 - :否则,它会从CT_Validation

相关问题