根据2个表编写SQL查询

时间:2015-05-24 17:11:16

标签: sql sql-server sql-delete

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

创意:如果在TableA中存在与TableB中的其他值匹配的主键,则基于TableBTableB删除行(外键)。

对于表格B,它应如下所示:

SELECT Column1 
FROM TableB
WHERE Column2 = 'Value';

然后

删除TableA中与Column1TableB)内的值匹配的行。

2 个答案:

答案 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');