sql - 是否可以进行具有重复 ID 的多对一 JOIN?
问题描述
我有两张表,一张是员工工作许可证,另一张是他们在该许可证期间负责的老板,老板表具有与某个员工相关的独特价值,该员工可以拥有许多许可证(假期,医疗原因等)。Boss 表通过员工的唯一 ID 以及他们上任的日期和期间与员工相关联。我正在努力加入这些表格,因为显然我无法在这两个条件下建立多对一的关系。
idemp convert() nameemp
-----------------
1 201801 john
1 201801 john
2 201802 jane
idemp period nameboss
------------------
1 201801 orange
2 201802 pink
3 201802 brown
我在找什么:
idemp convert() nameemp nameboss
-----------------------------
1 201801 john orange
1 201801 john orange
2 201802 jane pink
我尝试了外部应用并左连接,但我不断收到空值,其中 id重复多次,所以我会得到类似的东西:
idemp convert() nameemp nameboss
-----------------------------
1 201801 john orange
1 201801 john NULL
2 201802 jane pink
我的代码尝试
外用:
SELECT t.idemp, t.period, t.nameemp, d.nameboss
FROM dbo.employeePermit AS T
outer apply (select top (1) d.* from bossDot d where D.period= CONVERT(nvarchar(6), T.ORIGINAL_INI, 112) AND D.IDemp = T.IDemp order by d.period asc) d;
--One of the variables are converted in order to join with the period
左外连接:
SELECT t.idemp, t.period, t.nameemp, d.nameboss
FROM dbo.employeePermit AS T LEFT OUTER JOIN
dbo.bossDot AS D ON D.period= CONVERT(nvarchar(6), T.ORIGINAL_INI, 112) AND D.IDemp = T.IDemp
--One of the variables are converted in order to join with the period
我什至不知道我是否走在正确的轨道上,因此感谢您对查询或方法的任何帮助。
解决方案
ALEFT JOIN
将适用于您的情况。请使用示例数据查找查询:
DECLARE @WorkPermits TABLE (idemp INT, [period] VARCHAR(6), nameemp VARCHAR (10));
INSERT INTO @WorkPermits (idemp, [period], nameemp) VALUES
(1, '201801', 'john'),
(1, '201801', 'john'),
(2, '201802', 'jane');
DECLARE @Bosses TABLE (idemp INT, [period] VARCHAR(6), nameboss VARCHAR (10));
INSERT INTO @Bosses (idemp, [period], nameboss) VALUES
(1, '201801', 'orange'),
(2, '201802', 'pink'),
(3, '201802', 'brown');
SELECT W.idemp, W.period, W.nameemp, B.nameboss
FROM @WorkPermits AS W
LEFT JOIN @Bosses AS B ON B.idemp = W.idemp;
输出:
idemp period nameemp nameboss
---------------------------------
1 201801 john orange
1 201801 john orange
2 201802 jane pink
您可以使用您的实际表名和列名修改查询。
推荐阅读
- python - NameError: name 'client' is not defined 我该如何解决这个问题?(不和谐机器人)
- android - 如何在android中处理已弃用的Handler
- html - 为什么其他检查的无线电输入和标签不起作用?
- javascript - 光滑的滑块响应问题
- powershell - Powershell:invoke-item在不调用并且涉及星号时不会产生错误
- c++ - “变量”声明为“内联”字段
- c++ - 从范围内的数组中删除元素
- javascript - 如何自动分页到for循环?
- react-native - Passing Local Image To a Class Component - React Native
- c++ - In gtkmm, How to imply function which can create a new window when detach a notebook tab?