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
这篇关于当两个表之间存在匹配并且匹配不为空时,左连接返回重复行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:当两个表之间存在匹配并且匹配不为空时,左连接返回重复行


猜你喜欢
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- SQL 临时表问题 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01