Sql 完全的外部连接,有点内部连接
以下是我面临的问题:Sql 完全的外部连接,有点内部连接,sql,sql-server,inner-join,full-outer-join,Sql,Sql Server,Inner Join,Full Outer Join,以下是我面临的问题: 我从客户端收到预期的X 我收到了公司的X 代理机构 我必须完全外接 预期和实现的xson代码 平等只要他们属于 相同的作业文件 例如: Realized Xs for job file #123 : A and B Expected Xs for job file #123 : A and C Expected Xs for job file #456 : B 预期结果: Job_File Realized Expected -------- -------- ---
- 我从客户端收到预期的X
- 我收到了公司的X 代理机构
- 我必须完全外接 预期和实现的xson代码 平等只要他们属于 相同的作业文件
Realized Xs for job file #123 : A and B
Expected Xs for job file #123 : A and C
Expected Xs for job file #456 : B
预期结果:
Job_File Realized Expected
-------- -------- --------
123 A A
123 B NULL
123 NULL C
456 NULL B
当然,123的已实现B不应与456的预期B匹配,因为它们不属于同一个作业文件
所以,就好像我想同时对代码进行完全外部连接,对作业文件id进行内部连接
这看起来很奇怪,但是。。。事实上,这很合乎逻辑。我到底怎么能做这样的事
非常感谢您的宝贵帮助!:-) 您只需要在两个条件而不是一个条件下加入
SELECT COALESCE(realized.Job_File, expected.Job_File),
realized.code,
expected.code
FROM realized
FULL OUTER JOIN expected
ON realized.Job_File = expected.Job_File
AND realized.Code = expected.Code
所以,就好像我想同时对代码进行完全外部连接,对作业文件id进行内部连接
我假设您有以下表格:
Jobs
id
Realized
id
job_id
Expected
id
job_id
然后你就可以完全按照你说的去做了
SELECT j.job_id, r.id, e.id
FROM Jobs j
INNER JOIN (Realized r FULL OUTER JOIN Expected e
ON r.job_id = e.job_id)
ON j.id = r.job_id
完全外部联接应该可以正常工作(假设SQL Server支持它,我只使用Oracle进行了检查):
这应该是可行的,因为这是一个完整的外部连接,正如你自己所说:
select
isnull(r.JobFile, e.JobFile) as JobFile, Realized, Expected
from
(select 123 as JobFile, 'A' as Realized
union all
select 123, 'B') r
full outer join
(select 123 as JobFile, 'A' as Expected
union all
select 123, 'C'
union all
select 456, 'B') e on r.JobFile = e.JobFile and r.Realized = e.Expected
order by 1, 2
考虑到问题的发布方式,您的答案都是正确的。谢谢你们回答得这么快!:-) 我很难解释为什么不幸的是,如果不在帖子中添加太多具体的业务细节,它就不能应用到我的特定上下文中。纯粹的完全外部连接将导致添加数十亿条不需要的非匹配线 幸运的是,一位同事发现了这个诀窍,我把它反过来还给了他,以防有人能在我的问题中发现他自己的问题,尽管我把它说得很含糊:这个想法(简单地)是(简单地)将实现的内部连接到预期的作业文件id上,然后再次通过代码将结果完全连接到预期的外部
希望这能帮助某人…您能粘贴所有表的结构吗,也许可以使用一些示例数据?您有我们可以查看的真实格式的数据吗?如果我们不知道原作是什么样子的话,就很难给你一些东西。事实上,这让我很恼火;听起来你的业务细节是如此隐私,以至于你无法发布足够的信息,甚至给我们一个机会来回答你的实际问题。我看不到任何证据表明你看过答案。。。。那么,为什么要浪费每个人的时间,一开始就发布这个问题呢?@Chris业务细节不是私人的,但我觉得描述这个案例会变得不那么容易,而且会混合各种各样的问题。基本上,所有的作业文件都实现了Xs,只有相对少数的作业文件也期望Xs进入我的文章的范围。一个纯粹的完全外部连接将考虑所有已实现的X,这太多了数千行。
select
isnull(r.JobFile, e.JobFile) as JobFile, Realized, Expected
from
(select 123 as JobFile, 'A' as Realized
union all
select 123, 'B') r
full outer join
(select 123 as JobFile, 'A' as Expected
union all
select 123, 'C'
union all
select 456, 'B') e on r.JobFile = e.JobFile and r.Realized = e.Expected
order by 1, 2