Mysql 从表中删除记录取决于另一个表的值
您好,我是sql新手,我仍在学习任何建议或帮助,我将非常感谢 我有两个表:第一个表tbl1只显示id和描述的列表,第二个表tbl2列出了使用id的所有cx。tbl1的列id在tbl2 tbl2.address引用tbl1.id中具有公共值。我试图删除tbl1 id中的记录,其中该id在tbl2中的状态仅为完成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
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地址中!='完成了,虽然没有下面的回答那么优雅。谢谢你的帮助,我真的很感激我,你是天才,你介意怎么做吗?谢谢谢谢谢谢:您只需要设置从第二个表中选择数据的逻辑