Sql db2join返回多个重复项
在db2中,我有一个非常简单的select查询,其中我只需要左表(emps)中的一条不同记录,但是通过为managerName添加managers表,我会得到重复的记录,因为managers表可以将多行managers分配给同一个员工Sql db2join返回多个重复项,sql,db2,Sql,Db2,在db2中,我有一个非常简单的select查询,其中我只需要左表(emps)中的一条不同记录,但是通过为managerName添加managers表,我会得到重复的记录,因为managers表可以将多行managers分配给同一个员工 SELECT DISTINCT number, name, status, managerNum, m.managerName from emps e left outer join managers m on e.managerNum = m.manag
SELECT DISTINCT number, name, status, managerNum, m.managerName
from emps e
left outer join managers m
on e.managerNum = m.managerNum
group by number, name, status, managerNum, m.managerName;
有没有一种方法可以确保我只从左表中获取单个记录,并且只获取每个记录的managerName?换句话说,我应该每个“数字”只有一个记录
表数据示例:
电磁脉冲
管理者
empNumber | managerNum | managerName | location
-----------------------------------------------
123 321 manager 1
123 321 manager 2aa
任意管理器,其中包括:
with emp (number, name, status, managerNum) as (values
(123, 'Emp1', 'Active', 321)
)
, managers (empNumber, managerNum, managerName, location) as (values
(123, 321, 'manager', '1')
, (123, 321, 'manager', '2aa')
)
SELECT e.number, e.name, e.status, e.managerNum, m.managerName
from emp e
left join table(select managerName from managers m where m.managerNum=e.managerNum fetch first 1 row only) m on 1=1;
提示:子句上的
。您的加入条件是什么?如果一名员工有两名或两名以上的经理,您如何决定使用哪个经理。或者你在乎吗?然后在位置上添加额外的连接条件(你必须决定使用哪个位置行)。首先了解数据模型。对于该表数据,预期结果是什么?仅获取前1行
在缺少ORDER BY
的情况下是不稳定的。因为数据库未正常化,查询返回预期值。
with emp (number, name, status, managerNum) as (values
(123, 'Emp1', 'Active', 321)
)
, managers (empNumber, managerNum, managerName, location) as (values
(123, 321, 'manager', '1')
, (123, 321, 'manager', '2aa')
)
SELECT e.number, e.name, e.status, e.managerNum, m.managerName
from emp e
left join table(select managerName from managers m where m.managerNum=e.managerNum fetch first 1 row only) m on 1=1;