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

Sql 如果表中没有相关数据,则从其他表中提取数据,sql,tsql,Sql,Tsql,我是sql的新手 我有一个表1,[月],[预测平均温度]列。我有另一个表2,其中以[月份],[实际平均温度]为列。现在,对于某些日期,表1中没有可用的记录。在这种情况下,如果表2中有可用的记录,我想从表2中提取记录 例如,表1可能有一年(比如2010年)从4月到12月的记录。表2为2010年1月至12月的记录。我想从表2中提取表1中的1月、2月、3月记录 任何想法。我们正在使用SQLServer2008 提前感谢。一种方法是使用外部联接查询进行联合 select [month], [foreca

我是sql的新手

我有一个表1,[月],[预测平均温度]列。我有另一个表2,其中以[月份],[实际平均温度]为列。现在,对于某些日期,表1中没有可用的记录。在这种情况下,如果表2中有可用的记录,我想从表2中提取记录

例如,表1可能有一年(比如2010年)从4月到12月的记录。表2为2010年1月至12月的记录。我想从表2中提取表1中的1月、2月、3月记录

任何想法。我们正在使用SQLServer2008


提前感谢。

一种方法是使用外部联接查询进行联合

select [month], [forecasted avg. temperature] as temperature from table1
union
select [month], [actual avg. temperature] as temperature from table2
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

一种方法是使用外部联接查询进行联合

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
更新 根据Dems的评论,我更改了查询。最初的帖子听起来好像table2包含了所有月份的数据,所以我没有完全连接,而是切换了,这样它将从table2中提取所有记录,并连接table1,如果table1可用,则继续使用ISNULL作为临时数据。如果表2未包含所有数据,则需要完全联接

更新
根据Dems的评论,我更改了查询。最初的帖子听起来好像table2包含了所有月份的数据,所以我没有完全连接,而是切换了,这样它将从table2中提取所有记录,并连接table1,如果table1可用,则继续使用ISNULL作为临时数据。如果表2未包含所有数据,则需要进行完全联接。

如果两个表中都有月份,则会有不同的临时值将两者都提取出来。请注意,没有特别提到这种情况。如果两个表中都有月份,则会有不同的临时值将两者都提取出来。没错。现在,如果两个表中都有重复的值,那么我只需要保留表1中的温度值,如果两个表中都有月份,则两个表中的温度都会不同。请注意,没有特别提到这种情况。如果两个表中都有月份,则两个表中的温度都会不同。没错。现在,如果两个表中都有重复的值,那么我只需要保留表1+0中的温度值:A
JOIN
最接近我认为OP要求的值(尽管它有点含糊不清):如果存在T1,则从T1给出值,否则从T2给出值。但是您需要一个
完全外部联接
(如果T1中没有行,那么您的答案就没有什么可以联接T2的)。然后你需要在两个字段上都设置为null(),这是一个有趣的横向思考。我将把它放在我的巧妙计划框中。+0:A
JOIN
最接近我认为OP所要求的(尽管它有点含糊不清):如果T1存在,则从T1给出值,否则从T2给出值。但是您需要一个
完全外部联接
(如果T1中没有行,那么您的答案就没有什么可以联接T2的)。然后你需要在两个字段上都设置为null(),这是一个有趣的横向思考。我要把这个放进我狡猾的计划箱里。