Sql 连接没有键的表会导致不正确的结果
我有两个表-一个是主表,另一个是查找表。两个人都没有钥匙。各表的结构如下Sql 连接没有键的表会导致不正确的结果,sql,sql-server,Sql,Sql Server,我有两个表-一个是主表,另一个是查找表。两个人都没有钥匙。各表的结构如下 first name last name role location Compensation Level state john smith Manager LA A CA john smith Manager BOS B
first name last name role location Compensation Level state
john smith Manager LA A CA
john smith Manager BOS B MA
super smither developer LA B CA
tina taylor supervisor SFO A CA
tina taylor supervisor BOS B MA
first name last name role dept
john smith manager finance
john smith manager hr
super smither developer PA
tina taylor supervisor HR
tina taylor supervisor hr
可以理解的是,合并两个表以获取部门的名字、姓氏和角色组合将导致不正确的结果,因为混合中还涉及其他字段来标识真正的唯一记录
但是考虑到这样的结构,有没有办法将这两个表连接起来以获得dept
由于最终过程的设计方式和其他因素,使用内联子查询不是一个选项
有什么想法吗
预期产出:
first name last name role location Compensation state dept
john smith Manager LA A CA finance
john smith Manager BOS B MA hr
super smither developer LA B CA PA
tina taylor supervisor SFO A CA HR
tina taylor supervisor BOS B MA HR
这是一个给出确定性结果的示例,但它们是任意结果。它只是基于确定每个表中的“有序位置”,这样就可以做出选择,并且每次执行查询时,选择都是相同的,但无法知道选择是否正确
WITH
sorted_t1 AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY first_name, last_name, role
ORDER BY compensation_level, location, state) AS discriminator
FROM
t1
)
,
sorted_t2 AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY first_name, last_name, role
ORDER BY dept) AS discriminator
FROM
t2
)
SELECT
*
FROM
sorted_t1 t1
FULL OUTER JOIN
sorted_t2 t2
ON t1.first_name = t2.first_name
AND t1.last_name = t2.last_name
AND t1.role = t2.role
AND t1.discriminator = t2.discriminator
注意事项:
这假定是一个“不区分大小写”的排序规则序列。否则,john smith
行将永远不会加入(因为'Manager'
与'Manager'
不匹配)
类似地,表2中的两个tina taylor
行是不同的('hr'
vs'hr'
),但是如果排序规则序列不区分大小写,那么哪一行连接到哪一行并不重要,因为行之间没有“重大”差异
还值得注意的是,在上面的示例中,没有真正的理由假设来自LA的
'John Smith'
在财务中。查询只是强制该关联,因为在行编号()
中选择了排序依据。这意味着,当使用这种技术时,你真的应该使用其他字段,其中一个表示彼此相关的东西。没有任何键,你到底打算怎么做?没有办法分辨哪个约翰·史密斯在哪。tina taylor也一样。完全不是。这不是钥匙本身的问题,而是无法唯一识别角色/部门。表2需要的鉴别器也在表中1@DanGuzman我不知道,这是目前设计面临的挑战。除非重新设计结构,否则无法判断我是否为员工分配了正确的部门。这是一个设计问题。你需要解决这个问题。否则就没有解决方案解雇你的开发团队。从大炮里出来。