我试图通过引用来自不同表的数据来使用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
如何保存丢失的数据? 谢谢!
答案 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