如果表中没有相关数据,则从其他表中提取数据
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 :AJOIN
最接近我认为 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 查询从表中检索数据和第二个查询以提取其他结果,没有重复
如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回