如何在删除命令上添加条件?

时间:2014-12-04 21:51:32

标签: sql postgresql sql-delete

我有一个删除命令:

DELETE FROM exam WHERE excode = '2';

但我需要它以某种方式引用另一个表,如果该表中存在excode 2,则不删除它。

我一直在看这个:

http://www.postgresql.org/docs/8.2/static/sql-delete.html

这看起来像我需要理解的东西:

DELETE FROM films
WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');

会喜欢一些帮助

3 个答案:

答案 0 :(得分:2)

根据我的理解,这就是你想要的:

DELETE FROM exam WHERE excode = '2' and not exists (select * from table2 where excode = '2')

语法适用于SQL Server,但我认为您可以使用它而不做任何更改。

如果这不是您想要的,请再解释一下。

答案 1 :(得分:0)

是的,你可以通过使用这样的查询来做到这一点,如你所提到的第一个表格"考试(excode)"和第二个表作为" excodeTable(excode)"

DELETE FROM exam 
WHERE excode NOT IN(SELECT excode from excodeTable where excode='2')

如果要检查两个表中的值,即第一个表中的excode = 2,如果第二个表中也存在excode = 2,则不要删除。为此,您必须使用JOIN并使用AND条件

答案 2 :(得分:0)

你不能在postgres中对delete语句使用内连接,但你可以使用完全相同的“using”,这是最佳解决方案:

DELETE FROM films USING producers
  WHERE producer_id = producers.id AND producers.name = 'foo';

来源:http://www.postgresql.org/docs/9.4/static/sql-delete.html