重复删除问题

时间:2011-01-25 06:52:39

标签: sql sql-server-2005 tsql sql-server-2008

我正在开发一个数据库,我有两个表。

BILL_MASTER(master_table)

Bill_Master_ID
Consumer_No

BILL_GENERATION(明细表)

Bill_Master_ID

不知何故,用户在账单主人中插入了两个相同的消费者#,但bill_master_id是不同的...这是bill_master表的例子

Bill_Master_ID   Consumer_No
1                1234567890
2                1234567890

现在用户已经完成了bill_master_id“1”的一个事务,并且记录存在于Bill_Generation表中。

我想要做的是当我在SQL语句中传递消费者#作为参数时,它检查选择的消费者#Bill_master_id是否存在于bill_generation中。如果是,那么count return应为1,否则为0。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,这应该做你想要的。

IF (SELECT COUNT(consumer_no) FROM bill_master m 
    inner join bill_generation g on m.bill_master_id=g.bill_master_id
    WHERE consumer_no=1234567890
   ) > 1
   SELECT 1
ELSE
   SELECT 0

答案 1 :(得分:0)

标题具有误导性,这与删除无关,除非这是问题的补充。

那么你的意思是,根据消费者的不同,你需要在bill_generation中为bill_master中的任何消费者ID找到任何记录吗?

select case when exists (
    select *
    from bill_master m
    inner join bill_generation g on g.bill_master_id = m.bill_master_id
    where m.consumer_no = 1234   -- or some number
    ) then 1 else 0 end

要实际删除bill_master中除最低ID之外的记录,您可以使用此

;with tmp as (
    select *, rn = row_number() over (partition by consumer_no order by bill_master_id)
    from bill_master)
 delete tmp where rn > 1