1

まったく同じスキーマを持つ 2 つのテーブルがあります。1 つは 1 週間前のもので、もう 1 つは現在のものです。新しいレコードを new_data 、古いレコードを old_data とします。両方とも、主キー、販売ステージ (1、2、3、4..etc) および sales_values である機会 ID と呼ばれる列を持っています。1 週間のうちに、機会の販売段階が変化したり、機会の販売額が変化したりすることがあります。新しい Opportunity_id を追加することもできます。変更されたすべてのデータが必要です。

INNER_JOIN を試していますが、これは機会 ID が一致する場合にのみ機能します。新しく追加された機会も必要です。

MS Access を使用しているため、SQL ソリューションのみを提供してください。

ありがとう

4

3 に答える 3

4

探しているのはEXISTS句です。条件に一致する (または一致しない) 行を返します。クエリは次のようになります。

SELECT * 
FROM   new_data AS n 
WHERE  NOT EXISTS (SELECT * 
                   FROM   old_data AS o 
                   WHERE  n.opportunity_id = o.opportunity_id 
                          AND n.sales_stages = o.sales_stages 
                          AND n.sales_values = o.sales_values) 
于 2013-06-18T21:40:58.283 に答える
0

本当にすべての変更が必要な場合は、考慮すべきケースがもう 1 つあります。

削除されたキーはどうなりますか? old_dataに存在するキーと存在しないキーを意味しますnew_data。これらを取得するには、同じ一般的なアプローチを使用します (私の限られた経験では、OUTER JOIN は Access でより適切に機能するようです)。

SELECT [o].opportunity_id
FROM new_data AS n RIGHT JOIN old_data AS o 
  ON n.opportunity_id = [o].opportunity_id
WHERE ((([o].opportunity_id) Is Not Null))
  AND ((([n].opportunity_id) Is Null));
于 2013-06-19T18:23:03.320 に答える