嗨,我是sql的新手,我仍在学习任何建议或帮助,我将非常感谢。
我有两个表:第一个表(tbl1)仅显示ID和描述列表,第二个表(tbl2)列出所有使用ID的cx。 tbl1的列id在tbl2中具有公共值(tbl2.address
引用tbl1.id
)。我正在尝试删除tbl1 id中的记录,其中该id在tbl2中的状态仅为“完成”。
tbl1
id | description
-------+----------------------
addA | address A
addB | address B
addC | address c
tbl2
id | address | Status
----------+---------------+-------------
jk1ii | addA | using
hhh9 | addA | pending
ajjdia | addA | done
jhis99 | addB | done
ajduio | addC | using
tbl1的所需输出
id | description
------+-----------------
addA | address A
addC | address c
仅addB将被删除,因为不像addA和addC那样没有其他cx使用该地址,仍然有人在使用该地址,因此不会被删除吗?
现在我正在使用此查询
DELETE from tbl1
WHERE id in (select address FROM tbl2 WHERE status ='Done')
无论输出是否错误,即使tbl2中仍有一些cx正在使用它,它也会删除addA
答案 0 :(得分:3)
请尝试以下查询:
DELETE from tbl1
WHERE id in (select address FROM tbl2 group by address having sum(case when status='Done' then 0 else 1 end)=0)