如果表中没有相关数据,则从其他表中提取数据

Posted

技术标签:

【中文标题】如果表中没有相关数据,则从其他表中提取数据【英文标题】:Pulling data from a different table if pertaining data is not available in a table 【发布时间】:2012-04-13 15:43:28 【问题描述】:

我是 sql 新手

我有一个带有 [month]、[forecasted avg.温度]作为列。我有另一个带有 [月] 的表 2,[实际平均值。温度]作为列。现在对于某些日期,表一中没有可用的记录。在这种情况下,如果该表中有可用记录,我想从 table2 中提取记录。

例如,表 1 可能有 2010 年 4 月到 12 月的记录。表 2 有 2010 年 1 月到 12 月的记录。我想从表 2 中提取表 1 中缺失的 jan、feb、mar 月份的记录。

任何想法。我们使用的是 sql server 2008

提前致谢。

【问题讨论】:

【参考方案1】:
select 
   [month], isnull([forecasted avg. temperature], [actual avg. temperature]) as temperature 
from 
   table2 left outer join table1 on table1.[month] = table2.[month]

更新 根据 Dems 的评论,我更改了查询。原来的帖子听起来好像 table2 包含所有月份的数据,所以我只是切换了,而不是 FULL JOIN,所以它将从 table2 中提取所有记录,并在 table1 可用时加入,继续使用 ISNULL 作为临时。如果 table2 不包含所有数据,则需要 FULL JOIN。

【讨论】:

+0 :A JOIN 最接近我认为 OP 所要求的(尽管它有点模棱两可):如果存在,则从 T1 给出值,否则从 T2 给出值。但是您需要一个FULL OUTER JOIN (如果 T1 中没有行,则您的答案与 JOIN T2 无关)。然后你需要在两个字段上都使用 ISNULL()。 这是一个有趣的横向思考。我要把这个放在我的狡猾计划箱里。【参考方案2】:
select [month], [forecasted avg. temperature] as temperature from table1
union
select [month], [actual avg. temperature] as temperature from table2

【讨论】:

如果月份在两个表中,则将两个表都拉出的不同临时工。 请注意,没有特别提到该场景。 如果月份在两个表中,则将两个表都拉出的不同临时工。确实如此。现在,如果两个表中有 r 个重复值,那么我只需要保留表 1 中的温度值【参考方案3】:

一种方法是与外部连接查询联合

Select  [month], [forecasted avg. temperature] from Table1
Union
Select [month], [actual avg. temperature] From Table2
outer join Table1 on Table1.[Month] = Table2.Month
Where Table1.Month is null

别想了,看在 Cthulu 的份上,给你的表和列起合法的名字。

如果您想在输出中使用更友好的名称,请执行以下操作

Select ForeCastAvgTemp As [forecasted avg. temperature] From Table1

【讨论】:

以上是关于如果表中没有相关数据,则从其他表中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询从表中检索数据和第二个查询以提取其他结果,没有重复

如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回

求mysql数据库表中提取出汉字(去掉字母数字等,仅仅保留汉字)

根据表中其他列的值从同一表中的 2 列中选择信息

在另一个表中搜索整个单词的表,如果找到则从结果中排除

如果有重复的 Ticker 并且超过一个月的时差,则从数据框中提取 Ticker 名称