Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql db2join返回多个重复项_Sql_Db2 - Fatal编程技术网

Sql db2join返回多个重复项

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

在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.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;