Sql 选择基于另一个表删除特定记录的行

Sql 选择基于另一个表删除特定记录的行,sql,tsql,ms-access,Sql,Tsql,Ms Access,我有下表A: Cell1 Time1 a1 t1 a1 t2 单元格1时间1 a1 t1 a1 t2 另一表B: Cell2 Time2 SomeColumn2 a1 t1 c1 a1 t3 c2 第二单元时间第二栏 a1 t1 c1 a1 t3 c2 我想要表B中的值,其中(Cell2,Time2)组合不在表A中,如(Cell1,Time1) e、 g在给定情况下,输出为: Cell2 Time2 SomeColumn2 a1 t3 c2 第二单

我有下表A:

Cell1 Time1 a1 t1 a1 t2 单元格1时间1 a1 t1 a1 t2 另一表B:

Cell2 Time2 SomeColumn2 a1 t1 c1 a1 t3 c2 第二单元时间第二栏 a1 t1 c1 a1 t3 c2 我想要表B中的值,其中(Cell2,Time2)组合不在表A中,如(Cell1,Time1)

e、 g在给定情况下,输出为:

Cell2 Time2 SomeColumn2 a1 t3 c2 第二单元时间第二栏 a1 t3 c2 TSQL或ms access sql中的解决方案是什么

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中测试。

您需要的关系运算符为

SELECT b.*
FROM TableB b
LEFT JOIN TableA a ON b.Cell2=a.Cell1 AND b.Time2=A.Time1
WHERE a.Cell1 IS NULL
SQL缺少显式的反连接运算符或
JOIN
类型或关键字;这同样适用于访问(ACE、Jet等)。注意:例如,真正的关系语言使用
不匹配的
作为其反连接运算符

当然,可以使用其他SQL运算符编写反联接。最常见的用法
存在于(子查询)
中。根据数据的不同,可以使用外部联接,并限制外部表中的键测试null


就我个人而言,我更喜欢将EXISTS in SQL用于反联接,因为在编写的代码中联接子句更紧密,不会导致在联接表上的投影。这是@Mikael Eriksson的回答中使用的方法。

我发现你的这些回答和评论提到的不适用的关系理论比无用的更糟糕。David-W-Fenton:毫无疑问,我对这样的文章感到厌烦(尽管我收到的选票通常都是上升的:)就我个人而言,我发现能够识别SQL构造背后的关系运算符是很有价值的。我承认直到最近我才认为这类事情无关紧要。真诚的道歉,因为你可以期待更多的同样。