我有一个问题,我认为我的主要问题是弄清楚如何表达它以从 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 流程中构建冗余,以便当数据库丢失链接时,手动流程会捕获它们。
尽管我对任何想法都很感兴趣。