引用SQL Server中不同表的数据

时间:2016-03-29 22:28:21

标签: sql-server

我试图通过引用来自不同表的数据来使用join函数来匹配原始表中的数据。我解决了这个问题,但不知怎的,它丢弃了原始表中缺少值(NULL)的所有数据。

我试图引用的表格如下:

|seasons| season_num|
---------------------
|spring |    0      |
|summer |    1      |
|fall   |    2      |
|winter |    3      |
|NULL   |    -1     |

我只在原始表中有季节数据,所以想插入seasons_num信息。它与春季和冬季相匹配,但丢失了数据,缺少信息。

我提出的代码:

--adding season_num information
select s.*, l.seasons, l.season_num
FROM [A].[dbo].[originaltable] as s
join A.dbo.referringtable as l
on l.seasons=s.seasons_string
COLLATE DATABASE_DEFAULT

如何保存丢失的数据? 谢谢!

1 个答案:

答案 0 :(得分:0)

您需要使用LEFT JOIN才能包含原始(读取:左)表中的空值。

--adding season_num information
SELECT s.*, l.seasons, l.season_num
FROM [A].[dbo].[originaltable] as s
LEFT JOIN A.dbo.referringtable as l
ON l.seasons=s.seasons_string
COLLATE DATABASE_DEFAULT

如果要将空值与参考表匹配,这是一种解决方案。首先,将引用表修改为:

|seasons| season_num|
---------------------
|spring |    0      |
|summer |    1      |
|fall   |    2      |
|winter |    3      |
|null   |    -1     |

然后修改您的原始查询,以便将'null'子句中的orignal表的season列合并到ON,如下所示:

--adding season_num information
SELECT s.*, l.seasons, l.season_num
FROM [A].[dbo].[originaltable] as s
JOIN A.dbo.referringtable as l
ON l.seasons=COALESCE(s.seasons_string, 'null')
COLLATE DATABASE_DEFAULT