我有下表A:
Cell1 Time1 a1 t1 a1 t2
另一张表B:
Cell2 Time2 SomeColumn2 a1 t1 c1 a1 t3 c2
我想要表B中的值,其中(Cell2,Time2)组合在表A中不是(Cell1,Time1)。
例如在给定的情况下输出将是:
Cell2 Time2 SomeColumn2 a1 t3 c2
TSQL或ms-access sql中的解决方案是什么?
答案 0 :(得分:1)
select *
from TableB as TB
where not exists(select *
from TableA as TA
where TB.Cell2 = TA.Cell1 and
TB.Time2 = TA.Time1)
未在Microsoft Access中测试。
答案 1 :(得分:1)
SELECT b.*
FROM TableB b
LEFT JOIN TableA a ON b.Cell2=a.Cell1 AND b.Time2=A.Time1
WHERE a.Cell1 IS NULL
答案 2 :(得分:0)
您需要的关系运算符是antijoin。
SQL缺少显式反连接运算符或JOIN
类型或关键字;这同样适用于Access(ACE,Jet,等等)。请注意,真正的关系语言Tutorial D使用NOT MATCHING
作为其反连接运算符。例如。
当然可以使用其他SQL运算符编写反连接。最常见的使用EXISTS
或IN (subquery)
。根据数据,可以使用外部联接,对外部表测试中的键的限制为null。
就个人而言,我更喜欢在SQL中使用EXISTS进行反连接,因为join子句在编写的代码中更加靠近,并且不会导致在连接表上进行投影。这是@Mikael Eriksson的回答中使用的方法。