1

我有一个问题,我认为我的主要问题是弄清楚如何表达它以从 Google 获得可接受的答案。

情况:

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

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

现在这极大地简化了情况以尝试使其更容易理解,但我本质上是在寻找一个语句,它查看表 A 获取值,然后与列 B1 进行比较,如果不匹配,然后将其与 B2 进行比较,如果不匹配的则将其从结果中排除。关键是,如果它在与 B1 比较时匹配,则不会继续将其与 B2 进行比较。

对此的任何帮助将不胜感激,即使它只是指向执行此操作的非常明显的运算符或函数的方向。漫长的一天即将结束。

谢谢你。

编辑:

进一步说明:

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

Job Table
---------------------------------
PK, JOB_NUMBER, CLIENT_JOB_NUMBER

现在问题的关键是两个PK都是数据库生成的序号,没有重叠。发票编号和作业编号都是应用程序生成的序列号,没有重叠。作业的链接是应用程序生成的,并且在开具发票时,会根据规则链接到作业表中的两个字段之一。为简单起见,假设这些规则是如果没有链接到作业编号,是否有一个客户作业编号链接。

现在,客户工作编号是一个写入购买人员的字段,很多错误可能而且确实会发生,但也有很多废话。诸如“电子邮件”“传真”之类的东西是非常常见的答案。因此,当其中有诸如“电子邮件”之类的废话时,它会链接到具有相同“电子邮件”标签的一系列其他字段。

所以这是问题一。

问题二 Where 语句:

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 语句的 Distinct 来尽我所能用我所拥有的。但是我想做的是:

WHERE (LINK_TO_JOB = JOB_NUMBER (+) OR LINK_TO_JOB = CLIENT_JOB_NUMBER (+))

这会返回一个错误,因为您可以将外连接与 OR 运算符一起使用。

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

尽管我对任何想法都很感兴趣。

4

3 回答 3

1

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

于 2012-12-20T09:13:42.183 回答
1

一种方法是使用集合操作。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_NO 将具有引用 JOBS.JOB_NO 的外键关系。而 JOBS.CLIENT_NO 将是一条附加信息,一个业务密钥,但不会被 INVOICES 引用。当然它可以显示在实际发票上,这就是 Nature 给我们加入的原因。

于 2012-12-20T09:43:09.893 回答
0

好的,这里是集体努力。我使用了 APC 建议的联合加入。并修改以适应我的数据及其所有怪癖(从纸袋中读取法语无法数据模型)然后我将所有内容都包含在 user1871207 和 Hikaru-Shindo 建议的独特声明中。

但是对我来说是负分,我的问题如此不清楚的原因有好几倍,但我难以掌握/解释的一大块信息是发票并不总是用于工作,再加上发票可以合并(它只是把所有东西都搞砸了)而且这只是一个大混乱,我在你的帮助下设法贴上了一小块两年前的透明胶带。

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

为你的所有帮助干杯。

于 2012-12-20T11:27:15.057 回答