【问题标题】:SQL - Join or Union two tables checking for duplicates?SQL - 加入或联合两个表检查重复项?
【发布时间】:2020-01-26 04:04:02
【问题描述】:

假设我有如下两张表。

ALL_SPORTS

ID  Name  Age  Sport        Result  Date    Weather
----------------------------------------------------
1   Jake   12  Basketball   Won     1/2/13  Sunny
2   Jill   13  Tennis       Lost    2/3/13  Sunny
3   Sam    14  Basketball   Won     4/5/14  Cloudy
4   Ann    15  Football     Won     6/7/18  Cloudy
5   Will   18  Track        Lost    11/12/13 Rainy

&

Sports_results

ID   Sport   Result  Date
----------------------------
1    Bball   W       1/2/13
2    Tn      L       2/3/13
2    Fball   L       1/2/14
3    Fball   L       4/9/14
3    Fball   W       4/9/14
4    Bball   L       8/9/18
5    Tk      L       11/12/13
8    pngpng  W       9/4/15

ALL_SPORTS 有更多的列。 Sport_Results 更专业。他们都使用不同的方式来显示运动名称(Sports_results 使用缩写名称)和结果(输赢与 W 和 L)。

表之间有一些重叠,但每个表可能包含另一个表中未包含的内容,反之亦然。

我需要创建一个名为 ALL_RESULTS 的第三个表,它从 ALL_RESULTS 和 Sports_Results 中获取所有结果,检查重复的结果。它应该从表中获取以下值。

ALL_RESULTS(期望的结果)

ID  Name  Age  Sport        Result  Date    Weather
---------------------------------------------------
(From ALL_SPORTS)
1   Jake   12  Basketball   Won     1/2/13  Sunny
2   Jill   13  Tennis       Lost    2/3/13  Sunny
3   Sam    14  Basketball   Won     4/5/14  Cloudy
4   Ann    15  Football     Won     6/7/18  Cloudy
5   Will   18  Track        Lost    11/12/13 Rainy

(From Sports_results)
ID   Sport   Result  Date
-----------------------------
3    Fball   L       4/9/14
3    Fball   W       4/9/14
4    Bball   L       8/9/18
8    pngpng  W       9/4/15

目前我正在做一个联合,但由于两个表中包含的值的格式不同,并且ALL_SPORTS 包含更多列,联合无法找到重复项。

希望得到一些提示! TIA

【问题讨论】:

  • 为什么不添加一些额外的标识列?同一天有多个运动结果怎么样?

标签: sql sql-server


【解决方案1】:

只需选择常用的列并转换为相同的格式:

select a.ID, a.Sport, a.Result, a.Date
from all_sports a
union   -- on purpose to remove duplicates
select sr.ID, sr.Sport,
       (case sr.Result when 'W' then 'Won' when 'L' then 'Lost' end), 
       sr.Date
from Sports_results sr;

【讨论】:

  • 但是 ALL_RESULTS 会有更多的列,并且会有很多来自 Sports_Results 的空值。因此,两个原始表中同一事件的行在 ALL_RESULTS 中的列将多于 Sports_results。
  • 会更像select a.ID, a.Sport, a.name, a.age, a.Result, a.Date, a.Weahter from all_sports a union -- on purpose to remove duplicates select sr.ID, sr.Sport, (case sr.Result when 'W' then 'Won' when 'L' then 'Lost' end), sr.Date from Sports_results sr;
  • @redtopi 。 . .我认为这回答了您提出的问题。
猜你喜欢
  • 1970-01-01
  • 2014-11-09
  • 2018-08-07
  • 1970-01-01
  • 2016-03-12
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多