我真的很困惑写这个SQL查询,它可能很容易,但我仍然无法找到正确的解决方案。
创意:如果在TableA
中存在与TableB
中的其他值匹配的主键,则基于TableB
从TableB
删除行(外键)。
对于表格B
,它应如下所示:
SELECT Column1
FROM TableB
WHERE Column2 = 'Value';
然后
删除TableA
中与Column1
(TableB
)内的值匹配的行。
答案 0 :(得分:1)
IN
运算符中包含硬编码值,则{p> 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'
);
答案 1 :(得分:0)
假设您需要匹配ColumnX
中的TableA
:
DELETE FROM TableA
WHERE ColumnX IN (SELECT Column1
FROM TableB
WHERE Column2 = 'Value');