Left join returning duplicate rows when there is match between two tables and match is not null(当两个表之间存在匹配并且匹配不为空时,左连接返回重复行)
本文介绍了当两个表之间存在匹配并且匹配不为空时,左连接返回重复行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试对以下表使用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
这篇关于当两个表之间存在匹配并且匹配不为空时,左连接返回重复行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:当两个表之间存在匹配并且匹配不为空时,左连接返回重复行


基础教程推荐
猜你喜欢
- SQL Server 2016更改对象所有者 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01