Mysql 用于删除子表中未使用的父表行的sql查询

Mysql 用于删除子表中未使用的父表行的sql查询,mysql,sql,Mysql,Sql,我的题目正好说明了我需要什么帮助 表格定义和关系: 我尝试了下面的查询,但没有从测量单位表中删除数据“jl”。我想删除“测量单位”表中有62的那一行,因为它不在“食品单位关系”表中使用 我试过的这个: DELETE t2 FROM food_units_relation t1 JOIN measureing_units t2 ON t1.measuring_unit_id = t2.measuremnt_id WHERE t1.foodUni

我的题目正好说明了我需要什么帮助

表格定义和关系:


我尝试了下面的查询,但没有从测量单位表中删除数据“jl”。我想删除“测量单位”表中有62的那一行,因为它不在“食品单位关系”表中使用

我试过的这个:

DELETE  t2
        FROM food_units_relation t1 JOIN measureing_units t2
        ON t1.measuring_unit_id = t2.measuremnt_id
        WHERE t1.foodUnit_relation_Id = 17 and  t2.measuremnt_id NOT IN(t1.measuring_unit_id) and t2.creater_id=1;

查看。

此处的问题-您使用内部联接,因此您甚至不选择
食品单位关系中不存在的
度量id
。改为使用右连接,并排除
t1
表中的条件:

DELETE  t2
        FROM food_units_relation t1 RIGHT JOIN measureing_units t2
        ON t1.measuring_unit_id = t2.measuremnt_id
        WHERE t1.measuring_unit_id IS NULL 
              AND t2.creater_id=1;
或者只是使用不存在的代码:

   DELETE FROM measureing_units t2 
      WHERE NOT EXISTS (SELECT * FROM food_units_relation t1 
                        WHERE t1.measuring_unit_id = t2.measuremnt_id)
            AND t2.creater_id=1

这个答案出现在低质量审查队列中,可能是因为您没有解释一些代码。如果你解释了这一点(在你的答案中),你就更有可能获得更多的选票,提问者实际上学到了一些东西@戴帽子的人,谢谢通知。除非OP跟进,否则没有太多的解释要做。这是一个直截了当的快速回答:)@amit\u g我尝试了你的查询,它没有删除记录,正如我在我的question@Sundarat1.foodUnit\u relation\u Id=17必须排除这些记录。请在删除该条件后重试。where子句中的未知列“FOOD\u UNITS\u RELATION.FOOD\u UNITS\u RELATION\u ID”,并且您还没有在where子句中使用这些creater\u ID和t1.foodUnits\u RELATION\u ID组合
DELETE  t2
        FROM food_units_relation t1 RIGHT JOIN measureing_units t2
        ON t1.measuring_unit_id = t2.measuremnt_id
        WHERE t1.measuring_unit_id IS NULL 
              AND t2.creater_id=1;
   DELETE FROM measureing_units t2 
      WHERE NOT EXISTS (SELECT * FROM food_units_relation t1 
                        WHERE t1.measuring_unit_id = t2.measuremnt_id)
            AND t2.creater_id=1