2

Microsoft Access 2007 を使用していますが、この SQL にはEXCEPT演算子がないことがわかりました。LEFT JOINIS NULLを使用してこの操作を実行できることを学びました。私はほとんどそれを持っていますが、親指を置くことはできません。

2 つのテーブルがあり、テーブル A には personID、foodID、および timePURCHASED のデータがあります。IDを持つ人は、ある時間にIDの食品を購入します。表 B はそのサブセットです。(テーブル A から行を選択しています。)

私の目標は、テーブルA EXCEPTテーブルB.

表 A

personIDfoodIDtimePURCHASED             
1            1         2/6/2012 1:00:00 PM       
1            4         2/6/2012 6:00:00 PM       
2            3         2/7/2012 8:00:00 PM       
3            1         2/6/2012 9:00:00 PM       
3            3         2/6/2012 4:00:00 PM       

表 B

personIDfoodIDtimePURCHASED             
1            1         2/6/2012 1:00:00 PM       
3            3         2/6/2012 4:00:00 PM       

ゴール

personIDfoodIDtimePURCHASED             
1            4         2/6/2012 6:00:00 PM       
2            3         2/7/2012 8:00:00 PM       
3            1         2/6/2012 9:00:00 PM       

これが私が始めた私のコードです:

SELECT A.personID, A.foodID, A.timePURCHASED  
FROM A  
LEFT JOIN B ON (A.personID = B.personID)   
WHERE ((B.personID) Is Null);

これにより、GOAL テーブルに一致する personID がなく (1、3)、personID が一致しない (2) という結果になることを理解しています。3 つの列すべてを同時に検討する必要があることを理解しており、 LEFT JOINでAND演算子を使用できることがわかりました。

SELECT A.personID, A.foodID, A.timePURCHASED  
FROM A  
LEFT JOIN B ON (A.personID = B.personID)  
AND (A.foodID = B.foodID)  
AND (A.timePURCHASED = B.timePURCHASED)  
WHERE (((B.personID) Is Null)  
AND ((B.foodID) Is Null)  
AND ((B.timePURCHASED) Is Null));

これまでのところ、これは機能していません。アドバイスを求めています。形式、TLDR、またはこれが答えやすいものである場合はお詫び申し上げます。私は初心者で、SQLを学んでいます。ご協力ありがとうございます。

4

1 に答える 1

2

2番目のクエリは一般的に見栄えがします。ただし、入力セットにnullがないため、 3つすべてのIS NULLチェックは必要ありません。これらの括弧をすべて削除することもできます。

SELECT A.personID, A.foodID, A.timePurchased 
  FROM A 
  LEFT JOIN B 
  ON A.personID = B.personID
    AND A.foodID = B.foodID
    AND A.timePurchased = B.timePurchased
  WHERE B.personID is null;

これは、仕様から設定した新しいデータベースで完全に機能します(つまり、指定した「GOAL」関係を正確に出力します)が、2番目のクエリも同様に機能します。

したがって、SQL自体ではなく、セットアップに問題があるようです。これらの2つのテーブルに対するあなたのCREATE TABLEステートメントはどのように見えますか?具体的には、比較しているデータ型は何ですか?timePURCHASEDカラムはボンネットの下にありますか?もしそうなら、彼らは彼らの中にスペースを持っていますか?1つのテーブルに文字列と他DATETIMEのテーブルがありますか?そして、Terje D.の指摘によれば、あなたが見ている結果は正確には何ですか?

于 2013-02-10T23:54:47.717 に答える