在DB2中,使用以下左连接
select a.deptno, a.deptname, b.empno
from #dept a
left join #emp b
on a.deptno = b.workdept
在两张桌子上,给我一个列表:
dpt name emp
----------------------
A01 ACCOUNTING 5001
A02 PAYROLL NULL
A03 OPERATIONS 5003
A03 OPERATIONS 5004
A03 OPERATIONS 5007
A05 MAINTENANCE NULL
但我只想要任何dpt的第一个实例。有没有办法对左连接进行编码以仅拉出第一个匹配项,因此它看起来像:
dpt name emp
----------------------
A01 ACCOUNTING 5001
A02 PAYROLL NULL
A03 OPERATIONS 5003
A05 MAINTENANCE NULL
答案 0 :(得分:3)
select a.deptno, a.deptname, b.empno
from #dept a
left join #emp b
on a.deptno = b.workdept
group by a.deptno
having b.empno = min(b.empno)
这样的事情应该有效。
答案 1 :(得分:2)
您可以尝试类似
的内容select a.deptno, a.deptname, min(b.empno)
from #dept a
left join #emp b
on a.deptno = b.workdept
group by a.deptno, a.deptname
答案 2 :(得分:1)
这实际上取决于你如何定义“第一”。在您生成的结果集中,empno
基本上是随机的。如果empno
无关紧要,为什么不把它排除在外呢?所以:
SELECT DISTINCT a.deptno, a.deptname
FROM #dept aleft
JOIN #emp bon a.deptno = b.workdept;
如果empno
确实重要,那么您需要定义empno
最重要的质量并对其进行测试。所以:
SELECT a.deptno, a.deptname, b.empno
FROM #dept aleft
JOIN #emp bon a.deptno = b.workdept
GROUP BY a.deptno
HAVING b.empno = some_criteria(b.empno);//where some_criteria is the appropriate function