基于 2 个表编写 SQL 查询
Writing the SQL query based on 2 tables
我写这个 SQL 查询真的很困惑,它可能很容易,但我仍然无法找到正确的解决方案。
想法:如果 TableB
中存在与 TableB
中的某个其他值匹配的主键,则根据 TableB
从 TableA
中删除行(外键)。
对于 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'
);
我写这个 SQL 查询真的很困惑,它可能很容易,但我仍然无法找到正确的解决方案。
想法:如果 TableB
中存在与 TableB
中的某个其他值匹配的主键,则根据 TableB
从 TableA
中删除行(外键)。
对于 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'
);