1

私の主な問題は、Google から受け入れ可能な回答を得るためにどのように表現するかを考え出すことだと思う問題があります。

状況:

テーブル A は「請求書」であり、2 つの場所でテーブル B の「ジョブ」にリンクする列があります。「ジョブ番号」列または「クライアント番号」列にリンクしています。主な問題は、クライアントがジョブを設定する代わりにジョブを設定した場合、「クライアント番号」と「ジョブ番号」が同じ番号になる可能性があるという事実です。

私が得ているのは、どちらかの列に同じ数字があるたびに、結果が重複していることです。

これは状況を非常に単純化して、もう少し理解しやすくしようとしていますが、基本的には、テーブル A を見て値を取得し、一致しない場合は列 B1 と比較し、一致しない場合は B2 と比較するステートメントを探しています一致しないものは結果から除外されます。重要なのは、B1 と比較したときに一致する場合、B2 と比較しないことです。

これを行う非常に明白な演算子または関数の方向性の単なるポイントであっても、これに関する任意の助けをいただければ幸いです。とても長い一日の終わりを迎えようとしています。

ありがとうございました。

編集:

さらなる説明:

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

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

問題の核心は、両方の PK がデータベースで生成された連続番号であり、重複がないことです。請求書番号とジョブ番号は両方ともアプリケーションで生成された連番であり、重複することはありません。ジョブへのリンクはアプリケーションで生成され、請求書が発行されると、ルールに基づいてジョブ テーブルの 2 つのフィールドのいずれかにリンクされます。簡単にするために、これらのルールはクライアント ジョブ番号へのリンクがある場合、ジョブ番号にリンクされていない場合とします。

現在、クライアントのジョブ番号は購入者に書き込まれるフィールドです。多くの間違いが発生する可能性があり、実際に発生しますが、このフィールドにも多くのがらくたが入力されます. 「Email」「Fax」などは非常に一般的な回答です。そのため、「電子メール」のようながらくたがある場合、同じ「電子メール」タグを持つ一連の他のフィールドにリンクします。

それが問題の 1 です。

問題 2 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)

これは、ジョブ番号とクライアント ジョブ番号が同一である場合や、「email」などの回答に同一のものが複数ある場合など、多数の倍数を返します。持てる力で最善を尽くす。しかし、私がやりたいことは次のとおりです。

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

OR演算子で外部結合を使用できるため、エラーが返されます。

これで何も得られない場合は、OR 接続を使用して Select Distinct を投入し、請求プロセスに冗長性を構築して、データベースがリンクを見逃したときに手動プロセスでそれらをキャッチする必要があるかもしれません。

私はどんなアイデアにも耳を傾けていますが。

4

3 に答える 3

1

これを行う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 に答える
1

SELECT DISTINCT を使用して、結果セットから重複を削除します。

于 2012-12-20T09:13:42.183 に答える
0

OK、ここでグループ作業を行います。APC が提案するようにユニオン結合を使用しました。そして、私のデータとそのすべての風変わりなものに合うように修正しました(フランス人は紙袋からそこにデータモデルを作成できなかったと読んでください)そして、user1871207とHikaru-Shindoによって提案された明確なステートメントですべてを囲みました.

しかし、私の質問が非常に不明確だった理由はいくつかありますが、私が把握/説明するのが困難だった大きな情報は、請求書が常に仕事のためであるとは限らないということでした.統合されました(すべてが台無しになりました)これは、あなたの助けを借りて、2年前のスコッチテープの非常に小さな部分を貼り付けることができた大きな混乱です.

ここでのキャリアを継続するための私の唯一の希望は、発生する例外を使用して (スパイダーモンキーのように私に来るでしょう!)、願わくば請求プロセス全体を修正して、基本的な利益と損失の数値を報告できるようにすることです。

皆様のご協力に乾杯。

于 2012-12-20T11:27:15.057 に答える