基于成功删除基于列条件的另一行删除两行 - Sybase

时间:2014-05-29 10:43:56

标签: sql sql-server sql-server-2008 sybase sqlanywhere

我只是在删除另一个第3行的情况下尝试删除两行。现在,这里的问题是,第3行有一个条件,只有值#34; A"列" MAN",它应删除相应的行。

我在Sybase(使用Interactive SQL IDE的SQL Anywhere)中进行此操作。

我无法使用@@ ROWCOUNT。

有人可以给我一个查询,或者如何实现这一点。

算法:

从EFS删除 姓名=' MAN' AND VAL =' A'

如果(DeleteSuccessful) { 从EFS中删除 姓名=' MAN_1' AND NAME =' MAN_2' }

我希望在Sybase的单个查询中实现此目的。

替代方法:

我也可以考虑通过首先检查VAL列的值来实现这一点,如果它是XX,那么我可以使用WHERE NAME =' MAN AND NAME =&#39编写一个查询来删除所有3行; MAN_1' AND NAME =' MAN_2'。这也是一种方法。但是,在单个查询/

中,不知道如何使用Sybase中的语法来完成它

2 个答案:

答案 0 :(得分:1)

我认为您应该检查这些值是否存在并在一个查询中执行

DELETE FROM EFS 
  WHERE (NAME='MAN' AND VAL='A')
        OR
        ( 
          (NAME='MAN_1' AND NAME='MAN_2')
          AND 
          EXISTS (SELECT * FROM EFS WHERE NAME='MAN' AND VAL='A')
         )

答案 1 :(得分:1)

我相信你和valex都得到了正确的结果,但你的语法有点偏。最好使用IN与OR来提高性能。

IF EXISTS (SELECT * FROM EFS WHERE NAME='MAN' AND VAL='A') 
BEGIN
  DELETE FROM EFS WHERE NAME IN ('MAN','MAN_2','MAN_3')
END

并且,我认为你可以使用@@ rowcount,也许你不会认为这是单一的陈述方法,但它也有效,例如。

select * from tempdb..test
irecord
1
2
3
99

declare @deleted INT
delete from tempdb..test where irecord = 3
select @deleted = @@rowcount
if @deleted > 0
begin
  print 'deletion detected'
  delete from tempdb..test where irecord IN (1,2)
end
else
  print 'no deletion detected'

1 row(s) affected.
1 row(s) affected.
deletion detected
2 row(s) affected.

select * from tempdb..test
irecord
99
相关问题