Mysql 从表中删除记录取决于另一个表的值

Mysql 从表中删除记录取决于另一个表的值,mysql,sql,sql-delete,Mysql,Sql,Sql Delete,您好,我是sql新手,我仍在学习任何建议或帮助,我将非常感谢 我有两个表:第一个表tbl1只显示id和描述的列表,第二个表tbl2列出了使用id的所有cx。tbl1的列id在tbl2 tbl2.address引用tbl1.id中具有公共值。我试图删除tbl1 id中的记录,其中该id在tbl2中的状态仅为完成 tbl1 id | description -------+---------------------- addA | address A add

您好,我是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将被删除,因为没有其他cx使用该地址。与addA和addC不同的是,仍有人使用该地址,因此不会删除该地址。是否可能

现在我正在使用这个查询

DELETE from tbl1
WHERE id  in (select address FROM tbl2 WHERE status ='Done')
但是输出错误,即使tbl2中仍有一些cx在使用它,它也会删除addA

请尝试以下查询:

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)

您可以只在WHERE子句中添加一个条件:并且id不在tbl2 WHERE status的SELECT地址中!='完成了,虽然没有下面的回答那么优雅。谢谢你的帮助,我真的很感激我,你是天才,你介意怎么做吗?谢谢谢谢谢谢:您只需要设置从第二个表中选择数据的逻辑