我正在使用 Microsoft Access 2007,发现此 SQL 没有EXCEPT运算符。我了解到我可以使用LEFT JOIN和IS NULL来执行此操作。我几乎拥有它,但不能完全把我的拇指放在它上面。
我有两个表,表 A 有 personID、foodID 和 timePURCHASED 的数据。有身份证的人在特定时间购买身份证的食物。表 B 是其中的一个子集。(它从表 A 中选择了行。)
我的目标是做:表 A 除了表 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)。我知道我需要同时考虑所有三列,发现我可以在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。感谢您提供任何帮助。