我有一个删除命令:
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');
会喜欢一些帮助
答案 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