Sql 将表链接到第二个表中的两列

Sql 将表链接到第二个表中的两列,sql,oracle,Sql,Oracle,我有一个问题,我认为我的主要问题是如何从谷歌那里得到一个可接受的答案 情况: 表A是“发票”,它有一列在两个位置链接到表B的“工作”。它可以链接到我们的“工作编号”列或“客户编号”列。主要问题是,如果我们设置作业而不是客户设置作业,“客户编号”和“作业编号”可以是相同的编号 我得到的是,每一列中有相同的数字时,结果都是重复的 现在,这非常简化了情况,试图让它更容易理解,但我实际上是在寻找一个语句,该语句查看表a,获取值,然后与列B1进行比较,如果不匹配,则将其与B2进行比较,如果不匹配,则将其从

我有一个问题,我认为我的主要问题是如何从谷歌那里得到一个可接受的答案

情况:

表A是“发票”,它有一列在两个位置链接到表B的“工作”。它可以链接到我们的“工作编号”列或“客户编号”列。主要问题是,如果我们设置作业而不是客户设置作业,“客户编号”和“作业编号”可以是相同的编号

我得到的是,每一列中有相同的数字时,结果都是重复的

现在,这非常简化了情况,试图让它更容易理解,但我实际上是在寻找一个语句,该语句查看表a,获取值,然后与列B1进行比较,如果不匹配,则将其与B2进行比较,如果不匹配,则将其从结果中排除。关键是,如果它与B1进行比较时匹配,则不会继续与B2进行比较

对此的任何帮助都将不胜感激,即使这只是非常明显的运算符或函数的方向上的一个点。漫长的一天即将结束

多谢各位

编辑:

进一步说明:

Invoice Table
---------------------------------
PK,  INVOICE_NUMBER,  LINK_TO_JOB

Job Table
---------------------------------
PK, JOB_NUMBER, CLIENT_JOB_NUMBER
现在问题的关键是,这两个PK都是数据库生成的序列号,没有重叠。发票号和作业号都是应用程序生成的序列号,没有重叠。到作业的链接是应用程序生成的,并且当提出发票时,将根据规则链接到作业表中两个字段之一。为了简单起见,让我们假设这些规则是,如果有一个客户机作业编号链接,如果没有链接到该作业编号

现在,客户工作编号是一个写在buy people中的字段,很多错误可能也确实会发生,但在这个字段中也会有很多垃圾。像“电子邮件”、“传真”这样的东西是非常常见的答案。因此,当有垃圾在那里像'电子邮件',它链接到一系列其他领域持有相同的'电子邮件'标签

这就是问题一

问题二陈述:

SELECT INVOICE_NUMBER,
       LINK_TO_JOB
       JOB_NUMBER,
       CLINET_JOB_NUMBER

    FROM JOBS_TABLE a, 
         INVOICE_TABLE b
如何设置where语句以获得所需的结果,我已尝试:

WHERE (LINK_TO_JOB = JOB_NUMBER OR LINK_TO_JOB = CLIENT_JOB_NUMBER)
这会返回很多倍数,例如当工作编号和客户工作编号相同时,以及当有多个相同的书面答案“电子邮件”时等。现在这可能是不可避免的,我将使用一个独特的where语句来尽我所能利用我所拥有的。然而,我想做的是:

WHERE (LINK_TO_JOB = JOB_NUMBER (+) OR LINK_TO_JOB = CLIENT_JOB_NUMBER (+))
这会返回一个错误,因为您可以将外部联接与OR运算符一起使用

如果没有任何结果,我可能只需要使用OR连接,然后加入Select Distinct,然后在开票过程中构建冗余,这样当数据库丢失链接时,手动过程就会捕获它们


尽管我对任何想法都洗耳恭听。

使用SELECT DISTINCT从结果集中删除重复项。

一种方法是使用set操作。UNION将为您提供一组独特的值。你没有给出太多细节,所以我在猜测细节:你需要根据自己的需要修改它们

with j as ( select * from jobs )
select j.*, inv.*
from invoices inv
     join j on ( inv.job_no = j.job_no)
union
select j.*, inv.*
from invoices inv
     join j on ( inv.job_no = j.client_no)


您遇到困难的根本原因是数据模型是半熟的。在正确的设计中,INVOICES.JOB\u NO将具有引用JOBS.JOB\u NO的外键关系。而JOBS.CLIENT\u NO将是一条附加信息,一个业务键,但不会被发票引用。当然,它可以显示在实际的发票上,这就是为什么大自然给我们加入的原因。

好的,好的,这里是团队努力。我使用了APC建议的联合加入。修改以适应我的数据和它的所有古怪之处(阅读法语不能从纸袋里拿出数据模型),然后我用user1871207和Hikaru Shindo提出的一个独特的声明来描述一切

但我得到了否定的分数,我的问题如此不清楚的原因有好几方面,但我很难掌握/解释的一大信息是发票并不总是用于工作,再加上发票可以合并的事实(这一切都搞砸了)这只是一个大烂摊子,我在你的帮助下放了一小段两年前的透明胶带

我在这里继续职业生涯的唯一希望是利用出现的例外情况(它们会像蜘蛛猴一样向我袭来!),希望修改整个发票流程,以便我们能够报告一些基本的损益数字


为你的帮助干杯

您能提供一些有关它的示例数据吗..看起来您必须使用或条件我不确定我是否正确理解您的意思,但如果您希望发票只显示一次,您可以尝试在发票id上选择一个
选择DISTINCT
。如果没有示例数据,这是一个非常不清楚的问题。否,您的主要问题是有人设计并实现了一个愚蠢的数据模型。您是否加入了这两个表?如果是这样,您将需要加入
作业
两次-一次用于作业编号链接,一次用于客户编号选择Distinct将非常好,但所获得的结果并不精确,这将导致此解决方案无法运行。我将编辑我的问题以显示示例。