当两个表之间存在匹配并且匹配不为空时,左连接返回重复行
我正在尝试对以下表使用LEFT JOIN连接两个表
账表
Zone ACC_NUM Profile Status
INT 123456 11 Active
DOM 246810 12 Active
INT 135791 12 Inactive
仪表表
Acc_Num Meter
123456 156894
135791 NULL
预期结果
Zone ACC_NUM Profile Status Meter
INT 123456 11 Active 156894
DOM 246810 12 Active NULL
INT 135791 12 Inactive NULL
我编写了以下查询,但我看到一些重复项,如下面查询后面的结果
Select a.Zone, a.Acc_Num, a.Status, m.Meter
From Account a
left join Meter m on m.Acc_Num=a.Acc_Num
我得到了以下不理想的结果
Zone ACC_NUM Profile Status Meter
INT 123456 11 Active NULL
INT 123456 11 Active 156894
DOM 246810 12 Active NULL
INT 135791 12 Inactive NULL
从上面的结果中我发现,当两个表之间都有匹配时,meeter isnot null
返回重复的行,一个有NULL meter
,另一个有实际值,当没有匹配时或者当存在匹配但meeter为NULL时看起来很好。
我可以知道获得预期结果的更好方法吗?
解决方案
您的代码完全有效:
CREATE TABLE #Account(
Zone VARCHAR(30) NOT NULL
,ACC_NUM INTEGER NOT NULL
,Profile INTEGER NOT NULL
,Status VARCHAR(80) NOT NULL
);
INSERT INTO #Account(Zone,ACC_NUM,Profile,Status) VALUES ('INT',123456,11,'Active');
INSERT INTO #Account(Zone,ACC_NUM,Profile,Status) VALUES ('DOM',246810,12,'Active');
INSERT INTO #Account(Zone,ACC_NUM,Profile,Status) VALUES ('INT',135791,12,'Inactive');
CREATE TABLE #Meter(
Acc_Num INTEGER NOT NULL
,Meter VARCHAR(60)
);
INSERT INTO #Meter(Acc_Num,Meter) VALUES (123456,'156894');
INSERT INTO #Meter(Acc_Num,Meter) VALUES (135791,NULL);
Select a.Zone, a.Acc_Num, a.Status, m.Meter
From #Account a
left join #Meter m on m.Acc_Num=a.Acc_Num;
LiveDemo
Meter
表中的数据。我猜您还有123456 NULL
值的附加行。
如果每个组只需要一个值,可以使用:
Select a.Zone, a.Acc_Num, a.Status, m.Meter
From #Account a
left join (SELECT Acc_Num, MIN(Meter) AS Meter
FROM #Meter
GROUP BY Acc_Num) AS m on m.Acc_Num=a.Acc_Num
LiveDemo2
相关文章