我正在开发一个数据库,我有两个表。
Bill_Master_ID
Consumer_No
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。
答案 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