【问题标题】:SQL - How to DELETE a row using AVG() data from another table?SQL - 如何使用另一个表中的 AVG() 数据删除一行?
【发布时间】:2021-07-02 12:27:54
【问题描述】:

我需要从students 表中删除平均分不高于 3,5 的学生。

标记存储在exax_marks 表中,其中包含student_id 列。 学生存储在students 表中,可以通过id 加入exam_marks

这是我写的查询,但它不起作用:

DELETE s FROM students AS s
JOIN exam_marks AS em ON s.id. = em.student_id
WHERE em.AVG(mark) <= 3.5

这是我尝试过的另一个查询,但也没有用:

DELETE s FROM students s
JOIN exam_marks em ON s.id. = em.student_id
WHERE s.id IN(
SELECT student_id FROM exam_marks 
GROUP BY student_id 
HAVING AVG(mark) <= 3.5)

【问题讨论】:

    标签: mysql sql join sql-delete


    【解决方案1】:

    我会建议一个相关的子查询:

    DELETE s
        FROM students s
        WHERE (SELECT AVG(em.mark)
               FROM exam_marks em
               WHERE s.id = em.student_id
              ) <= 3.5;
    

    也就是说,这是一件荒谬的事情,除非您有级联外键约束。如果没有,您将在exam_marks 中拥有“悬空”的学生 ID——它们不涉及任何内容。或者如果声明了外键,你可能根本无法删除。

    【讨论】:

    • 我认为你是对的,我将不得不从两个表中删除。在这种情况下有什么查询的想法吗?
    • @YuriiParfinenko 。 . .这回答了您在这里提出的问题。您应该将 new 问题作为 new 问题提出。
    猜你喜欢
    • 2010-12-19
    • 2011-06-04
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多