基于 2 个表编写 SQL 查询

Writing the SQL query based on 2 tables

我写这个 SQL 查询真的很困惑,它可能很容易,但我仍然无法找到正确的解决方案。

想法:如果 TableB 中存在与 TableB 中的某个其他值匹配的主键,则根据 TableBTableA 中删除行(外键)。

对于 table B 它应该是这样的:

SELECT Column1 
FROM TableB
WHERE Column2 = 'Value';

然后

删除 TableA 中与 Column1 (TableB) 中的值匹配的行。

假设你需要在TableA中匹配ColumnX:

DELETE FROM TableA 
WHERE ColumnX IN (SELECT Column1 
                  FROM TableB 
                  WHERE Column2 = 'Value');

IN 运算符适用于 IN 运算符中的硬编码值,例如 where SomeCoumn IN ('value1', 'Value2')

或者您正在检查像 WHERE SomeColumn IN (select PK_Column from SomeTable)

这样的主键列

因为在上述任何一种情况下,您的 IN 运算符中都不会有 NULL 值。

IN 运算符中的空值会返回意外结果。

更好的选择是使用 Exists 运算符...类似...

DELETE FROM TableA 
WHERE EXISTS ( SELECT 1 
               FROM TableB 
               WHERE TableA.ColumnX = TableB.Column1
                AND TableB.Column2 = 'Value'
            );