代码之家  ›  专栏  ›  技术社区  ›  Dexter

在MySQL中删除记录之前,如何将数据与另一个表的数据进行比较

  •  2
  • Dexter  · 技术社区  · 7 年前

    我有一个叫做注册的db,在这里所有的学生都将被添加到批次和课程中。 stud_id , course_id batch_id 正在使用fk引用另一个表。

     enrolment
    +----------+---------+-----------+----------+
    | enrol_id | stud_id | course_id | batch_id |
    +----------+---------+-----------+----------+
    |        1 |       1 |         2 |        1 |
    |        2 |       5 |         3 |        2 |
    |        3 |       4 |         5 |        3 |
    +----------+---------+-----------+----------+
    

    在我删除中的学生记录之前 student 表,我想比较 螺柱id students 带有 螺柱id enrollment 桌子如果匹配,请不要删除该学生。或某种消息,表示此记录与注册表链接,或其他信息。

    如果匹配,我想运行这个 $sql = "DELETE FROM students WHERE student_id = $id ";

    students
    +---------+------------+-----------+
    | stud_id | first_name | last_name |
    +---------+------------+-----------+
    |       1 | John       | Doe       |
    |       2 | Susy       | Roberts   |
    |       3 | John       | redneck   |
    +---------+------------+-----------+
    

    请帮忙!!

    2 回复  |  直到 7 年前
        1
  •  2
  •   Mittal Patel    7 年前

    可以使用 NOT IN

    DELETE FROM students
    WHERE student_id NOT IN (SELECT stud_id 
                        FROM enrolment) AND student_id = $id
    

    可以使用 NOT EXISTS

    DELETE FROM students
    WHERE NOT EXISTS(SELECT NULL
                    FROM enrolment
                   WHERE stud_id = $id) AND student_id = $id
    
        2
  •  1
  •   Richard Housham    7 年前

    您想运行如下查询

    $sql = SELECT COUNT(1) FROM enrolment WHERE stu_id = $id
    

    然后检查返回号码的内容,如果(>);0,然后出错。