【问题标题】:Determine which keys should 2 tables use to Join in SQL Server确定 2 个表应使用哪些键加入 SQL Server
【发布时间】:2019-03-27 14:31:35
【问题描述】:

我有以下 2 个表:

表1:

User-ID    Country

1111    USA 
2222    Brazil
3331    USA
3332    Korea
3333    Korea
3333    USA
3333    France
4444    UK

表2:

User-ID   Country  Region

1111      USA       NA
2222      Brazil    SA
3331      Korea     A
3332      Korea     A
3333      N/A       N/A
3330      France    E
4444      UK        E

我想使用“用户 ID”作为公共键加入两个表,但有一个例外。

我想要的结果是,当用户 ID 为“3333”时,我希望“国家/地区”仅作为公用键。

我尝试了以下 ncode,根据我的理解,这听起来合乎逻辑,但没有返回期望的结果:

Select T1.User-ID, T1.Country, Case When T1.User-ID ='3333' AND T1.Country = 
       T2.Country THEN T2.Region ELSE T2.Region END

From Table1 as T1 Left Outer Join
     Table2 as T2 ON T1.User-ID = T2.User-ID OR T1.Country = T2.Country

我尝试了一些其他方法但没有成功,我将得到的结果如下:

  • 用户 ID 3333 的空区域
  • USer-ID 3333 的重复行 而 3333 以外的记录将返回预期结果。

【问题讨论】:

  • THEN T2.Region ELSE T2.Region END 那么为什么要使用CASE 表达式,因为在这两种情况下它都会返回T2.Region 值?还是只是一个错字?
  • @Sami 这是一个不必要的代码,我在更改条件后忘记删除它,因为它不影响结果而错过了它。谢谢:)

标签: sql sql-server database


【解决方案1】:

您似乎想在ON 子句中添加一个附加条件:

From Table1 T1 Left Outer Join
     Table2 T2
     ON T1.UserID = T2.UserID AND
        (T1.UserId <> 33333 OR T1.Country = T2.Country)

【讨论】:

  • 感谢您的意见,我想我的问题中的表格描述不正确。我已经编辑过了。我在这里制作了一个小提琴以明确link
猜你喜欢
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多